WooCommerce仅在子分类显示商品计数器及解决计数相同问题
你之前自定义实现的代码存在两个问题:
- 每次调用都从全局
$wp_query读取当前页面的分类ID,循环输出子分类时不会动态切换为当前循环内的子分类ID,导致所有子分类计数完全一致 - 额外做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
相关产品推荐
相关产品推荐

