Woocommerce实现子分类页面返回按钮显示父分类名称
问题原因梳理
你现有代码的核心问题有2个:
get_ancestors第二个参数传错,你传了slug_name,该参数实际要求传入分类法名称,此处应传product_cat,且该方法返回的结果是父分类的ID数组,不是分类对象- 你直接用父分类ID
$parent_id->name取名称,ID是数字类型,不可能直接读取到分类名称属性,必须先通过ID获取分类对象才能读取名称字段
修正后完整代码
add_action( 'woocommerce_before_shop_loop', 'my_back_button_sample', 11 ); function my_back_button_sample() { if ( is_product_category() ) { $current_term = get_queried_object(); $back_text = '商品分类'; // 一级分类兜底显示文本,可自行修改 // 判断是否为子分类,存在父分类时获取父分类名称 if ( $current_term->parent != 0 ) { $parent_term = get_term( $current_term->parent, 'product_cat' ); if ( ! is_wp_error( $parent_term ) ) { $back_text = $parent_term->name; } } echo '<br/><div class="avia-button-wrap avia-button-left avia-builder-el-9 el_after_av_button el_before_av_button "> <a class="avia-button avia-icon_select-no avia-color-blue avia-size-medium avia-position-left " onclick="history.back();" style="cursor: pointer;"> <span class="avia_iconbox_title">返回至 '.$back_text.'</span></a></div> '; } }
逻辑说明
- 首先直接读取当前分类对象的
parent属性,值为0代表是顶级分类,此时可以显示自定义的兜底文本,无需取父分类 - 父ID不为0时,直接用
get_term方法通过父ID和product_cat分类法获取父分类对象,校验无错误后读取名称字段即可 - 移除了冗余的
get_ancestors遍历逻辑,不需要遍历所有祖先分类,直接取直属父分类即可满足需求,性能更高
内容的提问来源于stack exchange,提问作者Morne
相关产品推荐
相关产品推荐

