WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Cортировка товаров в Woocommerce: чтобы товары без цены или с ценой 0 показывались в конце списка?

Сейчас стоит сортировка по умолчанию по цене возрастание, но в каталоге много товаров без цены или с ценой 0.

Как сделать так чтобы эти товары показывались не в начале списка товаров а в конце не меняя способ сортировки.

Пробовал вот этот код. Но не работает.

add_filter('posts_clauses', 'order_by_stock_status', 50, 2);
function order_by_stock_status($posts_clauses) {
	global $wpdb;
	if (!is_admin() && is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy())) {
		$posts_clauses['orderby'] = "price_query.price > 0 DESC, " . $posts_clauses['orderby'];
	}
	return $posts_clauses;
}
Заметки к вопросу:
kerch 25 Дек. 2019

Нашел решение. Может кому-то пригодится.

// Товары без цены или с ценой равной нулю будут в конце списка
add_filter('posts_clauses', 'order_by_no_price', 50, 2);
function order_by_no_price($posts_clauses) {
   global $wpdb;
if (!is_admin() && is_woocommerce() && (is_shop() || is_product_category() || is_product_tag() || is_product_taxonomy())) {
	if($posts_clauses['join']!=' LEFT JOIN wp_wc_product_meta_lookup wc_product_meta_lookup ON wp_posts.ID = wc_product_meta_lookup.product_id '){
		$posts_clauses['join'] = $posts_clauses['join'] . " LEFT JOIN wp_wc_product_meta_lookup wc_product_meta_lookup ON wp_posts.ID = wc_product_meta_lookup.product_id ";    
	}        
	$posts_clauses['orderby'] = "wc_product_meta_lookup.min_price > 0 DESC, " . $posts_clauses['orderby'];
}   
return $posts_clauses;
0
kerch
24 декабря 2019

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация