WordPress ACF技术问题:如何参考首页字段调用方式从自定义文章类型获取字段
解决ACF调用自定义文章类型字段的问题
你的问题出在对get_post_type()函数的用法理解上——这个函数是用来获取某篇文章的类型,而不是获取该自定义类型下的具体文章实例。你传入'Common Modules'后得到的只是文章类型的slug字符串common_modules,但ACF的the_field()函数需要的是文章ID或者WP_Post对象作为第二个参数,所以之前的代码无法正确拉取字段内容。
下面是具体的解决方案,帮你实现从Common Modules自定义文章类型中获取字段,并且可以在页面中频繁复用:
1. 先获取自定义文章类型的文章ID
首先你需要查询到Common Modules类型下的具体文章。如果这个类型下只有一篇全局模块文章,直接取第一篇即可;如果有多篇,可以通过标题、ID或者自定义字段来筛选目标文章。
基础查询代码(放在页面模板开头)
// 查询Common Modules类型的已发布文章,取第一篇 $common_modules_posts = get_posts(array( 'post_type' => 'common_modules', // 注意用slug而不是显示名称 'posts_per_page' => 1, 'post_status' => 'publish', // 如果需要指定某篇,可以加'p' => 文章ID,比如'p' => 123 )); // 提取文章ID(如果查询到结果) $custom_post_id = !empty($common_modules_posts) ? $common_modules_posts[0]->ID : 0;
2. 调用ACF字段
现在你可以用$custom_post_id作为the_field()的第二个参数,来调用该自定义文章的字段,当前页面的About字段组内容直接调用即可:
<!-- 调用Common Modules的字段 --> <?php if ($custom_post_id) : ?> <h3><?php the_field('featured_text', $custom_post_id); ?></h3> <h2><?php the_field('header', $custom_post_id); ?></h2> <?php endif; ?> <!-- 调用当前About页面的字段 --> <p><?php the_field('intro'); ?></p>
3. 优化:封装成函数方便频繁调用
如果页面中有大量需要调用该自定义类型字段的内容,建议把查询逻辑封装成函数,放到主题的functions.php中,这样不用每次重复写查询代码:
// 在主题functions.php中添加 function get_common_modules_post_id() { // 静态变量缓存结果,避免重复查询数据库 static $post_id; if (isset($post_id)) return $post_id; $posts = get_posts(array( 'post_type' => 'common_modules', 'posts_per_page' => 1, 'post_status' => 'publish', // 关闭不必要的缓存,提升性能 'no_found_rows' => true, 'update_post_meta_cache' => false, 'update_post_term_cache' => false )); $post_id = !empty($posts) ? $posts[0]->ID : 0; return $post_id; }
之后在页面模板中就可以随时调用这个函数获取ID:
<?php $custom_post_id = get_common_modules_post_id(); ?> <!-- 任意位置调用字段 --> <?php if ($custom_post_id) : ?> <div><?php the_field('your_custom_field', $custom_post_id); ?></div> <?php endif; ?>
内容的提问来源于stack exchange,提问作者chappers
相关产品推荐
相关产品推荐

