WooCommerce获取分类别名 - 在函数中出现未定义的属性通知

13 浏览
0 Comments

WooCommerce获取分类别名 - 在函数中出现未定义的属性通知

我使用这个函数将 WooCommerce 的分类 ID 转换为分类别名。

function woocommerceCategorySlug($id){
    $term = get_term( $id, 'product_cat' );
    return isset($term->slug) ? $term->slug : '';       
}

这样可以工作,但问题是我收到一个通知。

注意:未定义属性:WP_Error::$slug 

有没有办法避免这个通知?

0
0 Comments

问题原因:

在函数中使用了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'];       
}

参考资料:

0
0 Comments

问题出现的原因是因为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本身就不是一个数组,则静默失败。

0