WooCommerce:在商店中展示特价商品

时间:2016-01-18 23:36:14

标签: wordpress woocommerce wp-query

关于仅展示销售产品,有很多问题和答案,但无论我尝试什么,它都无法运作。

我有以下查询

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' );

正在应用查询本身,但问题是。 如果产品是具有销售价格的变量,则产品将更改为简单产品," _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 个答案:

答案 0 :(得分:3)

来自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 );

}