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

WooCommerce仅在子分类显示商品计数器及解决计数相同问题

你之前自定义实现的代码存在两个问题:

  1. 每次调用都从全局$wp_query读取当前页面的分类ID,循环输出子分类时不会动态切换为当前循环内的子分类ID,导致所有子分类计数完全一致
  2. 额外做WP_Query查询属于重复操作,WooCommerce原生已经提前算好了每个分类的商品计数,直接调用即可
解决方案

以下两种方案二选一即可,不需要保留你之前写的自定义计数函数和前端调用代码。

方案1:直接修改主题原生模板代码

找到你主题中原有的计数器渲染代码,替换为以下内容,新增子分类判断逻辑即可:

<?php if (get_theme_mod('category_show_count', 1)) : ?>
    <p class="is-xsmall uppercase count">
        <?php 
        // 仅子分类显示计数:判断当前分类parent不等于0(不是顶级主分类)
        if ($category->count > 0 && $category->parent != 0) {
            echo apply_filters('woocommerce_subcategory_count_html', $category->count . ' ' . ($category->count > 1 ? __('Products', 'woocommerce') : __('Product', 'woocommerce')), $category);
        }
        ?>
    </p>
<?php endif;

这个方案直接复用原生已计算好的分类计数,无额外数据库查询,性能最优。

方案2:通过钩子过滤实现(无需修改模板)

如果不想改动主题模板文件,直接将以下代码添加到主题functions.php文件末尾即可:

add_filter('woocommerce_subcategory_count_html', 'hide_count_for_parent_category', 10, 2);
function hide_count_for_parent_category($count_html, $category) {
    // 顶级主分类parent值为0,直接返回空隐藏计数
    if ($category->parent == 0) {
        return '';
    }
    return $count_html;
}

这个方案不改动模板代码,后续主题升级也不会丢失配置。

  • 方案启用后如果开启了站点缓存,建议清空缓存后再查看效果
  • 记得删除你之前自行实现的add_product_count_view函数和对应的前端调用代码,避免重复输出内容

内容的提问来源于stack exchange,提问作者vocus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:06:05