错误显示的第58行是这一行:
$parent_term = get_term_by(\'ID\',$term_id, $taxonomy);
$term_parents = $delimiter."<a href=\\"".get_term_link($parent_term->slug,$taxonomy)."\\" title=\\"". $parent_term->name ."\\" >". $parent_term->name ."</a>" .$child_terms;
我们的错误是:
类WP\\u Error的对象无法转换为字符串
这意味着被附加的那些东西之一不是"string"
, 但实际上WP_Error
对象
我会怀疑get_term_link
, 这可能是返回错误对象的原因,这表明:
术语不存在分类法未注册或无效传递的值意外为空$parent_term
不是一个术语,而是一个错误对象,它将我们引向这里的课程:
Sometimes functions return error objects and you have to check for that, don\'t just assume it succeeded
如何检查错误让我们举一个总是失败的例子:
$value = get_term_link( "not a real term","fake taxonomy" );
if ( is_wp_error( $value ) ) {
// something went wrong
}
is_wp_error
如果
$value
是错误对象。某些函数可能返回
false
或
null
, 所以
!empty( $value )
也是一个有用的检查
错误对象可以包含错误代码和消息,您可以使用get_error_message()
显示它们的方法:
$value = get_term_link( "not a real term","fake taxonomy" );
if ( is_wp_error( $value ) ) {
// something went wrong
echo $value->get_error_message();
}
您还可以设置
$value
改为手动设置为默认值
关于globals的最后一点说明是,代码使用了全局变量,但这些变量具有超泛型名称,例如$taxonomy
. 其他插件也可能使用这些插件,它们可能会发生冲突。函数名也是如此。
更好的前缀:
// term parents function
function sergi_term_parents( $term_id, $child_terms ) {
global $sergi_taxonomy, $sergi_delimiter;
最好使用依赖注入并完全消除全局变量:
// term parents function
function sergi_term_parents( $term_id, $child_terms, $taxonomy, $delimeter ){
现在您的
term_parents
函数永远不会冲突,适用于任何分类法或delimeter