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

前端编辑当前文章标签时出现Trying to get property 'term_id' of non-object错误求解决

解决 "Trying to get property 'term_id' of non-object" 错误

错误核心原因是代码默认假设$term和$term_m一定是WP_Term对象,但实际场景中可能出现返回值为错误对象、空值或非对象类型的情况,以下是具体修复方案:

1. 校验wp_get_object_terms的返回结果

wp_get_object_terms在分类法不存在、参数错误时会返回WP_Error对象,而非空数组,直接循环该对象会触发报错。修改获取标签的代码:

$tags_all = wp_get_object_terms( $post_edit->ID,  $post_type.'_tag');
// 处理错误对象与非数组情况,确保后续循环安全
if ( is_wp_error( $tags_all ) || !is_array( $tags_all ) ) {
    $tags_all = array();
}

2. 循环时校验元素是否为WP_Term对象

遍历标签时先确认当前元素是合法的WP_Term对象,再访问term_id属性:

foreach ( $main_tag as $term_m ) {
    $checked='';
    // 跳过非WP_Term类型的元素
    if ( !is_a( $term_m, 'WP_Term' ) ) {
        continue;
    }
    foreach ( $tags_all as $term ) {
        // 确认是对象后再比较ID
        if ( is_a( $term, 'WP_Term' ) && $term->term_id == $term_m->term_id ) {
            $checked=' checked';
            // 找到匹配项后跳出循环,提升效率
            break;
        }
    }
    // 此处添加输出checkbox的代码
}

3. 优化方案:减少嵌套循环

提前提取已选标签的ID数组,避免嵌套循环,同时降低出错概率:

// 提取已选标签ID到数组
$selected_tag_ids = array();
foreach ( $tags_all as $term ) {
    if ( is_a( $term, 'WP_Term' ) ) {
        $selected_tag_ids[] = $term->term_id;
    }
}

// 遍历主标签直接判断ID是否存在
foreach ( $main_tag as $term_m ) {
    $checked = '';
    if ( is_a( $term_m, 'WP_Term' ) && in_array( $term_m->term_id, $selected_tag_ids ) ) {
        $checked = ' checked';
    }
    // 此处添加输出checkbox的代码
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:05:41