Starck43
@Starck43
Web разработчик (PHP, JS, WORDPRESS, SQL)

Почему может некорректно работать сортировка товаров Woocommerce по цене при пагинации?

Столкнулся с некорректной сортировкой товаров при переходе с первой страницы на последующие. На первой странице все прекрасно, а дальше не пойми как. Не могу отследить странную закономерность.

Смотрю на запрос SQL (Query monitor) - сортировка на месте:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
LEFT JOIN wp_term_relationships
ON (wp_posts.ID = wp_term_relationships.object_id)
LEFT JOIN wp_wc_product_meta_lookup wc_product_meta_lookup
ON wp_posts.ID = wc_product_meta_lookup.product_id
WHERE 1=1
AND ( wp_posts.ID NOT IN (
SELECT object_id
FROM wp_term_relationships
WHERE term_taxonomy_id IN (0) )
AND wp_term_relationships.term_taxonomy_id IN (646) )
AND wp_posts.post_type = 'product'
GROUP BY wp_posts.ID
ORDER BY wc_product_meta_lookup.min_price ASC, wc_product_meta_lookup.product_id ASC
LIMIT 0, 28


Вывод товаров, начиная со второй страницы, делаю через Ajax:
function products_loading_callback(){
	$args = unserialize( stripslashes( $_POST['query'] ) );
	$args['paged'] = $_POST['page'] + 1; // следующая страница

	query_posts( $args );

	if( have_posts() ) :

		// запускаем цикл
		while ( have_posts() ) {
			the_post();
			do_action( 'woocommerce_shop_loop' );
			wc_get_template_part( 'content', 'product' );
		}

	endif;
	die();
}


Фрагмент вывода товаров archive-product.php

// Выведем товары
			while ( have_posts() ) {
				the_post();

				do_action( 'woocommerce_shop_loop' );
				wc_get_template_part( 'content', 'product' );
			}

			if (  $wp_query->max_num_pages > 1 ) {
				?>
				<li id="wc-loadmore" class="categories" action="products_loading" data-posts-count="<?php echo $products_count; ?>" data-posts-per-page="<?php echo $posts_per_page; ?>">
						<?php wc_get_template('preloader.php'); ?>
					<script>
						var currentPage = <?php echo (get_query_var('paged')) ? get_query_var('paged') : 1; ?>;
						var queryVars = '<?php echo serialize($wp_query->query_vars); ?>';
					</script>
				</li>
				<?php
			}


Через var_dump() проверил в теле ajax переменную $_POST['query'] ( то есть $wp_query->query_vars ), но и там sortby указана как 'price', что еще посмотреть, кто знает?
  • Вопрос задан
  • 20 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы