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:在商店中展示打折商品的主要内容,如果未能解决你的问题,请参考以下文章