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
子句。