PHP报错:Trying to get property of non-object 问题排查求助
问题诊断与修复方案
首先,这个Trying to get property of non-object报错的直接原因非常明确:你代码中的$recipe_difficulty变量并不是一个对象,但你却尝试访问它的term_id和name属性。
为什么会出现这个问题?
在WordPress场景下,这个变量大概率是从自定义分类法(比如recipe_difficulty)获取的术语结果,但可能存在几种触发报错的情况:
- 调用
get_terms()这类获取术语的函数时,返回了WP_Error错误对象,而非预期的术语对象数组 - 遍历的数组中混入了非对象元素(比如
false、null或者普通数组) - 目标术语本身不存在,导致获取到的是无效值
修复代码的方案
你需要在访问对象属性之前,先做有效性检查,确保$recipe_difficulty是合法对象。推荐两种严谨的写法:
方案1:通用对象检查
// 先确认$recipe_difficulty是对象,再访问属性 if (is_object($recipe_difficulty)) { $recipe_difficulties_str .= "{$recipe_difficulty->term_id}:{$recipe_difficulty->name},"; }
方案2:针对WordPress术语的精准检查
因为这里处理的是食谱难度术语,更精准的方式是检查它是否是WordPress术语的标准对象类型WP_Term:
// 确保是WP_Term对象,避免误判其他类型的对象 if ($recipe_difficulty instanceof WP_Term) { $recipe_difficulties_str .= "{$recipe_difficulty->term_id}:{$recipe_difficulty->name},"; }
额外排查建议
如果想从根源解决问题,你可以追踪$recipe_difficulty变量的来源(比如它来自哪个函数的返回值,或是遍历的哪个数组),检查:
- 是否在调用
get_terms()时没有处理错误情况?可以用is_wp_error()先判断返回结果 - 遍历的数组是否被正确初始化,有没有混入无效值?
内容的提问来源于stack exchange,提问作者Alan Michael
相关产品推荐
相关产品推荐

