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

Timber与WordPress:如何获取全局选项中每个项目的ACF术语名称

问题排查与解决方案

你遇到的每个FAQ项目术语名称重复的问题,大概率是以下几个原因导致的,逐一排查:


1. 术语ID未正确关联到每个FAQ项目

先确认全局选项中存储的每个FAQ项目是否真的包含不同的术语ID。在page-faq.php里循环FAQ前,先打印输出全局选项的数据:

$faq_items = get_option('你的全局选项键名');
var_dump($faq_items); // 查看每个item的term_id字段值是否不同

如果所有item的term_id都一样,那问题出在全局选项的存储逻辑上——你在添加FAQ项目时,可能没有正确保存每个项目对应的术语ID。


2. get_term用法错误

你直接用get_term($term_id)->name有两个隐患:

  • 没有指定分类法参数:get_term需要第二个参数明确指定术语所属的分类法(比如你自定义的faq_category),否则WordPress可能匹配到错误的术语,甚至返回错误对象。
  • 未处理错误情况:如果术语ID无效,get_term会返回WP_Error,直接取name会导致报错,最终可能显示同一个默认值。

修正后的代码应该是:

// 替换成你实际使用的FAQ分类法名称
$taxonomy = 'faq_category';

foreach ($faq_items as &$item) {
    // 确保从当前item中取出正确的术语ID,比如item['term_id']
    $term_id = isset($item['term_id']) ? (int)$item['term_id'] : 0;
    
    if ($term_id > 0) {
        $term = get_term($term_id, $taxonomy);
        // 检查是否成功获取术语对象
        if (!is_wp_error($term) && $term instanceof WP_Term) {
            $item['term_name'] = $term->name;
        } else {
            $item['term_name'] = '未分类';
        }
    } else {
        $item['term_name'] = '未指定分类';
    }
}
// 解除引用,避免后续变量污染
unset($item);

3. Twig模板变量传递错误

确保你在PHP中是把每个FAQ项目的术语名称单独存入item数组,再整体传递给Twig,而不是用一个全局的$term_name变量(这样所有循环都会取最后一次赋值的值)。

Twig模板中直接调用每个item的term_name即可:

{% for item in faq_items %}
    <div class="faq-item">
        <h4>{{ item.title }}</h4>
        <span class="faq-category">分类:{{ item.term_name }}</span>
        <div class="faq-content">{{ item.content|raw }}</div>
    </div>
{% endfor %}

4. 变量作用域问题

如果你在循环外部定义了$term_id或$term_name,循环内没有重新赋值(比如遗漏了从当前item取ID的步骤),就会导致所有项目都使用同一个术语ID,最终名称重复。检查你的循环逻辑,确保每次循环都从当前FAQ项目中提取对应的术语ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:45:35