You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

wp_get_post_terms无法返回自定义分类法绑定的ACF字段值

问题原因

wp_get_post_terms()是WordPress原生函数,返回的WP_Term对象默认仅包含分类术语的原生属性,不会自动挂载ACF为术语添加的自定义字段值,你打印结果看不到link、icon字段属于正常表现,并非后台字段配置或数据录入出错。

解决方案

两种常用实现方式,按需选择即可:

方式1:遍历术语列表,手动追加指定ACF字段

ACF获取分类术语字段时,第二个参数需要传入{分类法标识}_{术语ID}格式的字符串作为查询标识,修改代码如下:

// 获取文章关联的分类术语
$terms = wp_get_post_terms($post->ID, 'review_banking', array());
$bankingoptions = array();

if (!is_wp_error($terms) && !empty($terms)) {
    foreach ($terms as $term) {
        // 为每个术语对象追加ACF自定义字段
        $term->link = get_field('link', $term->taxonomy . '_' . $term->term_id);
        $term->icon = get_field('icon', $term->taxonomy . '_' . $term->term_id);
        $bankingoptions[] = $term;
    }
}

$context['bankingoptions'] = $bankingoptions;

执行上述代码后,再打印$context['bankingoptions']就能看到每个术语对象上已经挂载了link、icon字段值。

方式2:批量拉取术语所有ACF字段

如果后续还会为该分类法新增其他ACF字段,不想每次手动追加字段,可以一次性拉取术语下所有ACF字段挂载到对象上:

$terms = wp_get_post_terms($post->ID, 'review_banking', array());
$bankingoptions = array();

if (!is_wp_error($terms) && !empty($terms)) {
    foreach ($terms as $term) {
        $acf_fields = get_fields($term->taxonomy . '_' . $term->term_id);
        if (!empty($acf_fields)) {
            foreach ($acf_fields as $field_key => $field_value) {
                $term->$field_key = $field_value;
            }
        }
        $bankingoptions[] = $term;
    }
}

$context['bankingoptions'] = $bankingoptions;
注意事项
  • 必须加is_wp_error()判断,避免分类法未注册、查询异常时抛出致命错误
  • 图片类型的icon字段,返回值格式和你在ACF后台的配置一致:选「数组」则返回包含图片地址、宽高、alt文本的完整数组,选「URL」则直接返回图片链接,选「ID」则返回媒体库附件ID,根据前端渲染需求取用即可
  • 从$context的写法判断你大概率在使用Timber+Twig开发,处理完字段挂载后,在Twig模板中直接通过{{ option.link }}、{{ option.icon }}就能正常输出字段值

内容的提问来源于stack exchange,提问作者Justin Blayney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:36:18