前端编辑当前文章标签时出现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
相关产品推荐
相关产品推荐

