You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:51:57