报错Cannot use object of type WP_Term as array的WordPress分类处理问题
解决WordPress中"Cannot use object of type WP_Term as array"错误
这个错误我之前也碰到过,核心问题很明确:你把get_categories()返回的WP_Term对象当成数组来访问了,自然会触发类型错误。咱们一步步来修复:
问题根源
get_categories()函数返回的是一组WP_Term对象,不是字符串数组。你代码里直接用$category[0]去取首字符,相当于试图把对象当作数组来索引,这在PHP里是不允许的。
修复方案
1. 先取出分类名称字符串
要操作分类名称的字符,得先从WP_Term对象里取出名称属性,存到一个字符串变量里,再对这个变量做检查和处理:
$cat_name = $category->name;
2. 修正后的完整代码
我把你的代码补全并修正了问题,还加了边界检查避免名称过短的警告:
$option = ""; $categories = get_categories( array( 'hide_empty' => 0 ) ); foreach ( $categories as $category ) { $cat_name = $category->name; // 先取出分类名称字符串 // 检查名称长度足够,且首字符是下划线、次字符是数字 if( strlen($cat_name) >= 2 && $cat_name[0] === '_' && ctype_digit( $cat_name[1] ) ) { // 移除开头的下划线 $processed_name = substr( $cat_name, 1 ); $option .= '<option>'.$processed_name.'</option>'; } else { $option .= '<option>'.$category->name.'</option>'; } }
3. 额外注意事项
- 所有WP_Term对象的属性都要通过
->访问,比如分类ID是$category->term_id,别名是$category->slug,不要用数组索引的方式。 - 如果特殊场景下确实需要把对象转成数组,可以用
(array)$category,但这种做法不推荐,直接使用对象属性更清晰、性能也更好。
内容的提问来源于stack exchange,提问作者rob.m
相关产品推荐
相关产品推荐

