WooCommerce获取分类别名 - 在函数中出现未定义的属性通知
问题原因:
在函数中使用了WooCommerce的函数get_category()
获取分类的slug,但是该函数在某些模板中无法正常工作,导致出现Undefined property notice(未定义属性通知)的错误。
解决方法:
可以使用WordPress的原生函数get_term_by()
来获取分类的slug,将其转换成代码如下:
function woocommerceCategorySlug( $id ){ $term = get_term_by('id', $id, 'product_cat', 'ARRAY_A'); return $term['slug']; }
参考资料:
问题出现的原因是因为get_term()
函数返回的可能是一个WP_Error
对象,如果找不到相应的分类。解决方法有两种。
第一种方法是在woocommerceCategorySlug()
函数中进行防御性编程,代码如下:
function woocommerceCategorySlug( $id ) { $term = get_term( $id, 'product_cat' ); if( is_wp_error( $term ) || !is_object( $term ) || !property_exists( $term, 'slug' ) ) return null; return $term->slug; }
在这个版本中,如果get_term()
返回的是一个WP_Error
对象,或者返回的不是一个对象,或者返回的对象没有slug
属性,就返回null
。否则,返回slug
。
第二种方法是让get_term()
函数将结果以关联数组的形式返回,简化了检查的过程,代码如下:
function woocommerceCategorySlug( $id ) { $term = get_term( $id, 'product_cat', ARRAY_A ); return isset( $term['slug'] ) ? $term['slug'] : null; }
在这个版本中,isset()
函数起到了双重作用:检查slug
是否存在于预期的数组中,或者如果$term
本身就不是一个数组,则静默失败。