如何解决检查某个类别是否包含在 WooCommerce 中出售的任何产品?
好吧,这听起来很简单,但我搜索了很多,但找不到合适的答案。我想检查一个类别是否包含任何促销产品。
例如,有 10 个类别。我想获取包含促销商品的类别,并排除不包含任何促销商品的类别。
好吧,我是 WP 新手。
解决方法
我对解决方案进行了大量搜索,最后我设法编写了自己的逻辑来回答这个问题。
步骤:
- 获取所有类别
- 获取销售产品的所有 ID
- 遍历第 1 步的类别
- 获取此类别的产品 ID
- 循环遍历第 4 步的 id
- 检查该 id 是否存在于销售产品的 id 列表中
- 如果找到,将标志设置为 true 并退出
- 如果 flag 为 false(没有产品在售),取消分类
这是我的示例代码:
<?php
$args = array(
'orderby' => 'name','order' => 'ASC','hide_empty' => true,'parent' => 0,);
$categories = get_terms( 'product_cat',$args );
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query_args = array(
'post_status' => 'publish','post_type' => 'product','posts_per_page' => -1,'paged' => $paged,'orderby' => 'ASC','meta_query' => WC()->query->get_meta_query(),'post__in' => array_merge( array( 0 ),wc_get_product_ids_on_sale() )
);
$sale_products = new WP_Query( $query_args );
$products_ids_on_sale = wc_get_product_ids_on_sale();
if($sale_products->have_posts()) {
foreach ($categories as $key => $category) {
//get product ids
$category_product_ids = get_posts( array(
'post_type' => 'product','posts_per_page' => -1,'post_status' => 'publish','fields' => 'ids','tax_query' => array(
array(
'taxonomy' => 'product_cat','field' => 'term_id','terms' => $category->term_id,'operator' => 'IN',)
),) );
$is_product_exist = false;
if ( ! empty($category_product_ids) ) {
foreach ($category_product_ids as $product_id) {
if (in_array($product_id,$products_ids_on_sale)) {
$is_product_exist = true;
break;
}
}
if ( $is_product_exist === false ) {
unset($categories[$key]);
}
}
}
wp_reset_query();
}
我在我的博客上写了一篇文章,更详细地解释了 https://www.kodementor.com/get-only-categories-that-contain-products-on-sale/
,此代码仅显示您商店中的特价商品。
请在您的活动主题functions.php文件中添加以下代码
add_action( 'woocommerce_product_query','only_sale_product_in_store' );
function only_sale_product_in_store( $q ){
$product_ids_on_sale = wc_get_product_ids_on_sale();
$q->set( 'post__in',$product_ids_on_sale );
}
五月对你很有用。谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。