关于仅展示销售产品,有很多问题和答案,但无论我尝试什么,它都无法运作。
我有以下查询
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' );
只有这样才对我有用。
答案 0 :(得分:3)
我认为这应该修改循环以仅显示销售产品:
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 );
}