获取分类文章数时出现Undefined offset与non-object错误的解决方法
问题分析与修复方案
我来帮你拆解下这两个错误的根源,以及对应的修复方法:
错误原因解析
这两个错误其实是连锁反应:
- Notice: Undefined offset: 0:说明你定义的
$cats数组是空的,根本没有第0个元素——大概率是你的分类查询没返回任何结果(比如目标分类不存在、查询参数写错了,或者菜单项对应的不是分类类型)。 - Notice: Trying to get property of non-object:因为
$cats[0]本身就不存在,你却试图访问它的count属性,自然会触发这个错误。
修复步骤
第一步:先做有效性校验
在访问$cats[0]->count之前,必须先确认$cats数组非空,且第一个元素是有效的对象。把你的判断代码改成这样:
// 先确保数组非空、第一个元素是对象,再判断文章数量 if (!empty($cats) && is_object($cats[0]) && $cats[0]->count > 0) { // 你原本显示分类文章数量的代码逻辑 echo '(' . $cats[0]->count . ')'; }
第二步:回溯$cats的获取逻辑
你还要检查一下$cats是怎么来的?比如如果是通过WordPress函数(比如get_categories()、get_term_by())获取的,要确保参数正确,且先验证前置条件。举个常见的场景:如果是从菜单项中关联分类,要先确认菜单项对应的确实是分类对象:
// 假设你从菜单项元数据中获取分类ID $term_id = get_post_meta($item->ID, '_menu_item_object_id', true); // 先确认分类ID有效,再执行查询 if (!empty($term_id) && 'category' === $item->object) { $cats = get_categories(array('include' => $term_id)); // 再执行刚才的有效性判断 if (!empty($cats) && is_object($cats[0]) && $cats[0]->count > 0) { echo '(' . $cats[0]->count . ')'; } }
额外建议
- 开发环境下保持PHP错误提示开启,方便快速定位问题;生产环境记得关闭错误输出,避免泄露站点信息。
- 调用WordPress的函数时,养成先验证返回值的习惯——毕竟不是所有查询都能返回预期的结果。
内容的提问来源于stack exchange,提问作者DoesJ
相关产品推荐
相关产品推荐

