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
相关产品推荐
相关产品推荐

