使用ACF Pro创建主题选项页后,如何在header.php获取字段值?
解决ACF Pro主题选项字段在header.php不显示的问题
我来帮你排查这个问题——用ACF Pro的主题选项字段在header里不显示内容,大概率是因为你没指定全局选项的ID参数,毕竟the_field()默认是针对当前帖子/页面的,而主题选项是全局存储的。
第一步:修正核心调用代码
把你的代码改成下面两种方式之一,明确告诉ACF去全局选项容器里取值:
- 直接输出(用
the_field):<?php the_field('call_now', 'options'); ?> - 先获取再输出(用
get_field,适合需要额外判断或处理的场景):<?php $call_now = get_field('call_now', 'options'); if($call_now) { echo $call_now; } ?>
第二步:排查基础设置是否到位
如果改了代码还是没显示,检查这几个关键点:
- 确认你的字段**键名(Field Name)**确实是
call_now——别把字段的显示标签(Field Label)当成了字段名,去ACF字段组里核对清楚。 - 去你的主题选项页,确认已经保存了
call_now字段的值,没保存的话肯定拿不到内容。 - 确认你已经在
functions.php里注册了主题选项页,ACF需要这段代码来创建全局选项的存储容器,示例代码如下:if( function_exists('acf_add_options_page') ) { // 基础注册 acf_add_options_page(); // 也可以自定义选项页的名称、权限等 // acf_add_options_page(array( // 'page_title' => '主题全局设置', // 'menu_title' => '主题设置', // 'menu_slug' => 'theme-global-settings', // 'capability' => 'edit_posts', // 'redirect' => false // )); }
第三步:排除缓存干扰
有时候缓存插件(比如WP Rocket、W3 Total Cache)会把header的静态内容缓存起来,导致新设置的字段值无法实时显示。可以暂时禁用缓存插件,刷新页面看看是否正常。
最后检查权限
确保当前登录用户有访问主题选项页的权限(默认是edit_posts权限,如果你自定义了权限规则,要确认当前用户符合要求)。
内容的提问来源于stack exchange,提问作者Anuj Kumar
相关产品推荐
相关产品推荐

