WooCommerce父分类及子分类模板判断条件问题求助
解决WooCommerce Music分类及子分类模板匹配问题
嗨,这个问题我之前帮不少开发者处理过,咱们来快速搞定它~
你之前的代码只对Music父分类生效,是因为is_product_category( 'music' )这个函数只会精准匹配slug为music的那个分类本身,不会识别它的子分类。要让所有子分类也用上自定义模板,咱们可以换两种更合适的写法:
方法一:用has_term函数(最简洁)
这个函数可以直接检查当前产品分类是否属于指定的分类(包含所有层级的子分类),代码改成这样就行:
if ( has_term( 'music', 'product_cat' ) ) { wc_get_template( 'archive-product-cubicles.php' ); } else { wc_get_template( 'archive-product.php' ); }
- 第一个参数
'music'可以替换成Music分类的ID或者名称,效果一样; - 第二个参数
'product_cat'是WooCommerce产品分类的专属分类法,不能写错哦。
方法二:检查分类父级链(更灵活)
如果你的Music分类有多层子分类,或者你想更精准控制,还可以通过遍历当前分类的父级链来判断:
// 获取当前访问的产品分类对象 $current_category = get_queried_object(); $belongs_to_music = false; // 循环遍历当前分类的所有父分类 while ( $current_category ) { // 匹配Music分类的slug或者ID(二选一即可) if ( $current_category->slug === 'music' || $current_category->term_id === 123 ) { $belongs_to_music = true; break; } // 往上找父分类 $current_category = get_parent_term( $current_category ); } // 根据判断结果加载对应模板 if ( $belongs_to_music ) { wc_get_template( 'archive-product-cubicles.php' ); } else { wc_get_template( 'archive-product.php' ); }
记得把代码里的123替换成你Music分类的实际ID,这样不管是多少层的子分类,只要最终父级是Music,都会触发自定义模板。
小提醒
- 确保你的自定义模板
archive-product-cubicles.php放在子主题的woocommerce文件夹里(如果没有就新建一个),这样主题更新时不会被覆盖; - 如果是在父主题里修改,修改前最好备份原文件哦。
内容的提问来源于stack exchange,提问作者Ketan
相关产品推荐
相关产品推荐

