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

wp_get_object_terms指定fields为tt_ids返回空数组问题求助

排查wp_get_object_terms返回tt_ids空数组的问题

我之前维护WordPress站点时也碰到过一模一样的情况——明明fields='all'能正常拿到分类项对象,指定'tt_ids'就返回空数组,结合你两个站点一正常一异常的情况,咱们可以从这几个方向逐步排查:

1. 先确认数据库关联是否正常

tt_ids对应的是wp_term_taxonomy表中的term_taxonomy_id,这个值是通过wp_term_relationships表和对象ID绑定的。你可以先手动检查数据库:

  • 打开wp_term_relationships表,查找object_id = 639的记录,看看对应的term_taxonomy_id有没有有效数值
  • 再去wp_term_taxonomy表中,用这个term_taxonomy_id查询,确认taxonomy字段确实是mh_menu,且deleted字段为0(未被软删除)

也可以直接执行SQL验证:

SELECT tr.term_taxonomy_id 
FROM wp_term_relationships tr 
JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id 
WHERE tr.object_id = 639 AND tt.taxonomy = 'mh_menu';

如果这条SQL返回空,说明对象和分类项的关联数据出了问题,需要重新绑定;如果有结果,那问题就出在WordPress的函数逻辑或第三方过滤器上。

2. 排查插件/主题的过滤器干扰

这种站点间的差异,大概率是某个插件或主题添加了wp_get_object_terms或term_query的过滤器,修改了特定fields参数下的返回结果。你可以:

  • 临时禁用所有第三方插件,切换到WordPress默认主题(比如Twenty Twenty-Four)
  • 再次执行wp_get_object_terms(639, 'mh_menu', array('fields' => 'tt_ids', 'orderby' => 'none'))测试

如果此时能正常返回tt_ids,就逐个启用插件、切换主题,找到导致问题的那个,然后查看它的代码中有没有针对wp_get_object_terms的过滤逻辑,必要时修改或移除相关代码。

3. 检查自定义分类法的注册代码

确认你的mh_menu分类法注册是否正确,特别是有没有遗漏关键参数或设置错误:

  • 确保注册是在init钩子上执行的,示例代码如下:
add_action('init', function() {
    register_taxonomy(
        'mh_menu',
        array('post'), // 替换成你的自定义文章类型或默认post
        array(
            'label' => 'MH Menu',
            'hierarchical' => true,
            'public' => true,
            'show_in_rest' => true, // 可选,但某些场景下需要开启
            // 其他必要参数
        )
    );
});

如果注册时设置了特殊的权限或过滤参数,也可能间接影响tt_ids的返回。

临时修复方案

如果暂时找不到问题根源,可以用自定义过滤器手动获取tt_ids:

add_filter('wp_get_object_terms', function($terms, $object_ids, $taxonomies, $args) {
    // 只针对mh_menu分类法和tt_ids字段的请求生效
    if ($args['fields'] === 'tt_ids' && in_array('mh_menu', $taxonomies)) {
        global $wpdb;
        // 兼容单个/多个对象ID的情况
        $placeholders = implode(',', array_fill(0, count($object_ids), '%d'));
        $tt_ids = $wpdb->get_col($wpdb->prepare(
            "SELECT tr.term_taxonomy_id FROM {$wpdb->term_relationships} tr JOIN {$wpdb->term_taxonomy} tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tr.object_id IN ($placeholders) AND tt.taxonomy = %s",
            array_merge($object_ids, array('mh_menu'))
        ));
        return $tt_ids;
    }
    return $terms;
}, 10, 4);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:46