微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查某个类别是否包含在 WooCommerce 中出售的任何产品?

如何解决检查某个类别是否包含在 WooCommerce 中出售的任何产品?

好吧,这听起来很简单,但我搜索了很多,但找不到合适的答案。我想检查一个类别是否包含任何促销产品。

例如,有 10 个类别。我想获取包含促销商品的类别,并排除不包含任何促销商品的类别。

好吧,我是 WP 新手。

解决方法

我对解决方案进行了大量搜索,最后我设法编写了自己的逻辑来回答这个问题。

步骤:

  1. 获取所有类别
  2. 获取销售产品的所有 ID
  3. 遍历第 1 步的类别
  4. 获取此类别的产品 ID
  5. 循环遍历第 4 步的 id
  6. 检查该 id 是否存在于销售产品的 id 列表中
  7. 如果找到,将标志设置为 true 并退出
  8. 如果 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?