我已经能够使用以下代码片段以默认排序在末尾显示缺货产品:
/**
* @snippet Order out of stock products at the end - WooCommerce
* @author Sebastian Velandia
* @compatible WooCommerce 3.8.0
*/
add_filter('posts_clauses', 'order_by_stock_status');
function order_by_stock_status($posts_clauses) {
global $wpdb;
// only change query on WooCommerce loops
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy())) {
$posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
$posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
$posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
}
return $posts_clauses;
}
这与默认的排序是可以的,但是当您应用其他排序条件(例如,按价格)时,它将停止工作,缺货的产品将从目录的开头再次可见。
如何修复此代码段以始终在末尾显示缺货的产品,而不考虑在目录中应用的排序?
1条答案
按热度按时间i7uq4tfw1#
所以这在测试中似乎是有效的。更改“商店”页面上的排序顺序时,orderby子句将被ordering替代。所以它使用过滤器
woocommerce_get_catalog_ordering_args
要将orderby函数附加到所有排序查询,请在从下拉列表中选择之前执行。