如何在任意位置获取自定义字段的图片URL?当前仅文章页可显示
问题根因
你当前代码在非文章页拿不到值的核心原因是,get_field() 是ACF插件的字段读取函数,不传第二个参数时会自动绑定当前全局 $post 对象的ID去匹配字段:
- 访问单文章详情页时,全局
$post刚好是当前文章的ID,能正常读到对应的自定义字段值 - 访问站点其他位置(首页、归档页、全局组件区域)时,全局
$post不是你存储了video_tab_thumb字段的目标文章ID,函数自然返回空值。
全站点可用的实现方案
1. 显式指定字段所属的对象ID
不管当前页面是什么全局上下文,调用get_field的时候明确传入字段归属的对象ID,就不会受全局$post的影响:
- 如果字段是存在某篇固定文章上:把目标文章ID作为第二个参数传入,比如取ID为456的文章上的字段,写法为
$image_url = get_field('video_tab_thumb', 456); - 如果字段是存在ACF创建的全局选项页上:第二个参数传
'option'即可$image_url = get_field('video_tab_thumb', 'option');
2. 全局挂载JS变量,保证所有页面都能加载
不要把取数逻辑零散写在header模板的body标签后面,把挂载全局JS变量的逻辑通过WordPress钩子挂载到全局页头加载流程里,保证站点所有页面访问时都会执行这段取数逻辑:
// 将以下代码加到主题的functions.php文件中 add_action('wp_head', 'load_global_video_tab_thumb_var'); function load_global_video_tab_thumb_var() { // 替换成你实际的目标对象ID(文章ID或'option') $target_object = 456; $image_url = get_field('video_tab_thumb', $target_object); // 取到值后输出全局JS变量,加转义避免特殊字符报错 if ($image_url) { echo sprintf( "<script type='text/javascript'>var tab_img_url = '%s';</script>", esc_js($image_url) ); } }
注意点
- 输出JS变量的时候必须用
esc_js()对URL做转义,避免URL里带引号、特殊字符导致JS语法错误 - 全局变量
tab_img_url挂载完成后,你在站点任意位置的前端JS代码里都可以直接调用这个变量,不需要重复写PHP取数逻辑
内容的提问来源于stack exchange,提问作者Abhi Sharma
相关产品推荐
相关产品推荐

