首页 > 解决方案 > 仅在子类别中显示产品计数器 - WooCommerce

问题描述

你好 stackoverflow 社区。

我正在尝试获得显示产品计数器的功能,但仅限于子类别。在主要类别中,我想禁用它。

目前我已经能够做到这一点:

function add_product_count_view()
{
    global $wp_query;

    $category_id = $wp_query->get_queried_object()->term_id;
    $query = new WP_Query(array(
  'tax_query' => array(
      array(
          'taxonomy' => 'product_cat',
          'field' => 'id',
          'terms' => $category_id,
          'include_children' => true,
      ),
  ),
  'nopaging' => true,
  'fields' => 'ids',
  ));

    if (function_exists("is_shop") && $category_id != 0) {
        echo '(' .esc_html($query->post_count) . ')';
    }
}

并输出

<span class="custom-home-category-counts">
       <?php do_action('count_product_title');?>
</span>

这样我就得到了我想要的,但是计数器为每个子类别显示相同的值 柜台

----更新---- @CBroe

所有这些代码都可能是垃圾。我对PHP的了解很差。一般来说,我的意思是,我想在主要类别中禁用产品计数器,只保留所有子类别。

这是呈现产品计数器的原始代码。

<?php if (get_theme_mod('category_show_count', 1)) : ?>
                    <p class="is-xsmall uppercase count">
                        <?php if ($category->count > 0) {
                    echo apply_filters('woocommerce_subcategory_count_html', $category->count . ' ' . ($category->count > 1 ? __('Products', 'woocommerce') : __('Product', 'woocommerce')), $category);
                }
                            ?>
                    </p>
                    <?php endif; ?>

标签: phpwordpresswoocommerce

解决方案


在每个自定义 WP_Query 之后,您需要运行wp_reset_postdata()以确保将全局$post恢复到主查询中的当前帖子。

在您的代码中,您可以按如下方式使用此函数:

function add_product_count_view()
{
    global $wp_query;

    $category_id = $wp_query->get_queried_object()->term_id;
    $query = new WP_Query(array(
  'tax_query' => array(
      array(
          'taxonomy' => 'product_cat',
          'field' => 'id',
          'terms' => $category_id,
          'include_children' => true,
      ),
  ),
  'nopaging' => true,
  'fields' => 'ids',
  ));

    if (function_exists("is_shop") && $category_id != 0) {
        echo '(' .esc_html($query->post_count) . ')';
    }
wp_reset_postdata(); //reset the main query loop

}

这样,下次查询运行时,它会使用新数据运行。这可能是计数器对所有子类别显示相同值的原因。


推荐阅读