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

WordPress无法通过terms getter从term对象获取术语名称问题

报错原因

你的代码存在三处核心问题,直接触发致命错误:

  • 错误取值文章ID:wp_get_recent_posts()返回的单条文章数据中,ID字段本身就是整数类型的文章ID,不是数组结构,你写的$post_item['ID'][0]属于非法取值,PHP会对整数做隐式类型转换,之前能输出term结果属于偶发的错误逻辑歪打正着,不代表写法正确。
  • 方法调用语法错误:双冒号::是PHP类静态方法/静态属性的调用符,__get是仅能在实例上触发的魔术方法,无法通过静态方式调用。
  • 调用主体错误、魔术方法使用方式错误:你尝试在错误取出的ID值上调用方法,根本没有指向WP_Term实例对象;同时PHP的__get是自动触发的魔术方法,不需要手动显式调用,且WP_Term的实例属性全部为公开属性,根本不需要走__get的访问逻辑。

另外你之前硬编码[0]索引取第一个term的写法也存在风险:如果文章没有关联对应分类法的术语,wp_get_post_terms()会返回空数组或者WP_Error对象,直接取索引会触发数组越界错误。

正确写法示例
$recent_posts = wp_get_recent_posts(array(
    'numberposts' => 5,
    'category' => 18,
    'post_status' => 'publish'
));
foreach ($recent_posts as $post_item) {
    $post_id = $post_item['ID'];
    // 第二个参数可替换为你需要获取的分类法,如category、自定义分类法标识
    $terms = wp_get_post_terms($post_id, 'post_tag');
    // 先判断返回值合法性,避免报错
    if (!is_wp_error($terms) && !empty($terms)) {
        foreach ($terms as $term) {
            // WP_Term属性为公开,直接通过对象属性符访问即可
            var_dump($term->name);
            // 其余属性如slug、term_id、taxonomy访问逻辑一致:$term->slug
        }
    }
}
补充提示

调用WordPress的术语、文章相关接口时,永远要先做返回值判断:接口在参数错误、无对应数据时会返回WP_Error对象或者空数组,直接遍历/取索引很容易触发站点报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:54:25