WooCommerce:在店内展示销售产品

WooCommerce:在店内展示销售产品,woocommerce,wordpress,Woocommerce,Wordpress,关于只在销售中展示产品,有很多问题和答案,但无论我尝试哪种方法,都不起作用 我有以下疑问 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['

关于只在销售中展示产品,有很多问题和答案,但无论我尝试哪种方法,都不起作用

我有以下疑问

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' );
正在应用查询本身,但问题是。 如果产品是具有销售价格的变量,则该产品将更改为简单产品,“\u min\u variation\u sale\u price”元值仍在数据库中

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

谢谢

编辑

我想我需要的是一种方法,如果产品是“简单”或“外部”术语,只检查销售价格,然后对“最小变化”销售价格进行类似的检查

我在他们的github上创建了一个问题。

编辑

问题通过@helgatheviking答案解决。 不过,请注意,要完全解决问题,必须删除变体、保存、更改类型、保存、运行
delete_transient('wc_products_onsale')
直到那时,它才对我起作用。

来自于我的

我认为这应该修改循环,只显示在售产品:

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\u get\u product\u id\u on\u sale()
不会检索正在销售的可变产品吗?当你将一个产品保存为带有销售的可变产品,然后将其更改为不带销售的简单产品时,它将返回该数组。@helgatheviking,我如何通过销售获得最著名的类别?请帮助。@MahaDev您将不得不发布一个新问题,但请确保问题清楚、详细。解释你正在尝试做什么,以及为什么你所尝试的到目前为止失败了。目前,我不明白你在问什么,对其他问题的评论不是解决这个问题的好地方。很好,这个很好,谢谢。需要指出的一点是,如果没有在售产品,那么这个过滤器根本不适用,因为WP_查询假设空数组的意思是(不要过滤)。因此,如果希望查询在没有产品在售时不返回结果,可以检查
wc\u get\u product\u ids\u on\u sale()
返回的是否为空,并将带有单个0元素的数组(即
array(0)
)传递给
post\u in
子句。