php - 仅在子类别中显示产品计数器 - 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; ?>
解决方案
在每个自定义 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
}
这样,下次查询运行时,它会使用新数据运行。这可能是计数器对所有子类别显示相同值的原因。
推荐阅读
- android - 如何在 android 中使用 style.xml 设置填充和文本类型面
- ios - 为什么我不能在@IBAction func 之外调用函数 StartTime?
- java - 如何在 Prometheus 中持续轮询 JSON 数据?
- python - 如何在熊猫中执行条件分组计算并前向填充零值
- database - 在 Docker 创建 MongoDB 上创建用户
- python - Django Oscar 仪表板的自定义图标
- net-snmp - 发送陷阱时出现 pysnmp.smi.error.SmiError
- android - 如何在 WebViewClient 中获取 SharedPreferences 值?
- android - OnCompleteListener - OnDeleteListener -OnUpdateListener
- rxjs - 在不应用订阅的情况下更新 observable 的值