WooCommerce:在商店中展示打折商品

Posted

技术标签:

【中文标题】WooCommerce:在商店中展示打折商品【英文标题】:WooCommerce: Display on-sale products in shop 【发布时间】:2016-01-18 23:36:13 【问题描述】:

关于只展示在售产品的问题和答案有很多,但无论我尝试什么,它都不起作用。

我有以下问题

function my_modify_main_query($query) 
    if ($query -> query['post_type'] == 'product' && $query -> is_main_query() && is_shop()) // Run only on the shop
        if (isset($_GET['sale'])):
            $query -> set('meta_query',
                array(
                    'relation' => 'OR',
                    array(// Simple products type
                        'key' => '_sale_price',
                        'value' => 0,
                        'compare' => '>',
                        'type' => 'numeric'
                    ),
                    array(// Variable products type
                        'key' => '_min_variation_sale_price',
                        'value' => 0,
                        'compare' => '>',
                        'type' => 'numeric'
                    )
                )
            );
        endif;
    

// Hook my above function to the pre_get_posts action
add_action( 'pre_get_posts', 'my_modify_main_query' );

正在应用查询本身,但问题是。 如果 Product 已经是一个带有销售价格的变量,那么 Product 将被更改为 Simple Product,“_min_variation_sale_price”元值仍在数据库中。

有人知道解决方法吗?我认为这是一个错误,但他们的支持目前已关闭。

谢谢。

编辑

我认为我需要的是一种仅在产品属于“简单”或“外部”条款时检查 _sale_price 的方法,然后对 _min_variation_sale_price 执行类似操作。

我在他们的 github 上创建了一个问题。 https://github.com/woothemes/woocommerce/issues/10096

编辑

使用@helgatheviking 答案解决了问题。 虽然,请注意要完全解决问题,您必须删除变体,保存,更改类型,保存,运行delete_transient( 'wc_products_onsale' ); 直到那时它才对我有用。

【问题讨论】:

【参考方案1】:

来自我在modifying the product query上的教程

我相信这应该修改循环以仅显示在售产品:

add_action( 'woocommerce_product_query', 'so_20990199_product_query' );

function so_20990199_product_query( $q )

    $product_ids_on_sale = wc_get_product_ids_on_sale();

    $q->set( 'post__in', (array) $product_ids_on_sale );


【讨论】:

下次,请提及您尝试过的所有事情,这样可以减少重复工作。您是否暗示wc_get_product_ids_on_sale() 不检索正在销售的可变产品? 当您将产品保存为有销售的变量,然后将其更改为没有销售的简单产品时,它会在该数组中返回。 @helgatheviking,我怎样才能通过销售获得最著名的类别?请帮忙。 @MahaDev 您将不得不发布一个新问题,但请确保问题清晰详细。解释你正在尝试做什么,以及为什么到目前为止你所做的尝试都失败了。目前,我不明白你在问什么,其他问题的 cmets 不是解决这个问题的地方。 不错,这个很好用,谢谢。需要指出的一件事 - 如果没有产品在售,则此过滤器根本不适用,因为 WP_Query 假定空数组表示(不过滤)。因此,如果您希望在没有产品在售时查询不返回任何结果,您可以检查 wc_get_product_ids_on_sale() 是否返回空并将具有单个 0 元素(即 array(0))的数组传递给 post__in 子句。

以上是关于WooCommerce:在商店中展示打折商品的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce:仅在列表中显示打折产品

亚马逊物流与 Woocommerce 同步

当订单中有缺货商品时,在 WooCommerce 电子邮件通知中显示消息

Woocommerce商店展示类别

如果不在商店中,则隐藏产品变体 - WooCommerce

Woocommerce API(Woo Dashboard github)