WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru WPmentor - Ищем топовых специалистов по WordPress, чтобы помочь вам заработать

WOOCOMMERCE — Товары без цены в конце loop в шаблоне категорий archive-product.php

Нужно выводить товары без цены в конце списка товаров текущей категории, но при этом нужно сохранить основную сортировку(в моём случае это дефолтная сортировка по цене по возростанию).

Нашел такой код, он прекрасно работает для товаров вне стока.

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;
}

Переделав немного для моего случая, сделал что-то вроде этого

add_filter('posts_clauses', 'order_by_stock_status', 9999);
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 pricestatus ON ($wpdb->posts.ID = pricestatus.post_id) ";
		$posts_clauses['orderby'] = " pricestatus.meta_key ASC, " . $posts_clauses['orderby'];
		$posts_clauses['where'] = " AND (pricestatus.meta_key <> '_price' OR pricestatus.meta_value <> '') " . $posts_clauses['where'];
	}
	return $posts_clauses;

Но не работает sad. Пробовал разные варианты JOIN и условий WHERE.

Думал сделать кастомный запрос к БД. Но как это совместить с шаблоном категорий где есть сорировка, пагинация и тд.

0
Sergs
3 сентября 2019

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

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