@80689248440

Откуда сортировка в $wp_query или как её отключить?

Пытаюсь вывести "свои" товары но они почему-то сортируются неправильно
while($aa = mysql_fetch_array($a)){				
			array_push($p_id, $aa['post_id']);				
		}
		if(count($p_id) == 0){
			***
		} else {
			$args['post__in'] = $p_id;
		}
		$args['post_type'] = 'product';
	}	
// в $wp_query->query сейчас находится только Array ( [post_type] => product ) 
	query_posts(array_merge($args,$wp_query->query));

в массиве $p_id
Array
(
    [0] => 30788
    [1] => 30787
    [2] => 30786
    [3] => 36196
    [4] => 33569
    [5] => 33568
    [6] => 22032
    [7] => 22745
    [8] => 29516
    [9] => 26660
    [10] => 22033
    [11] => 33396
    [12] => 33397
    [13] => 35537
    [14] => 34520
    [15] => 34521
    [16] => 35805
    [17] => 35263
    [18] => 35536
    [19] => 34519
    [20] => 28829
    [21] => 28827
    [22] => 35599
    [23] => 28826
    [24] => 35595
    [25] => 35598
    [26] => 35535
    [27] => 34522
    [28] => 35400
    [29] => 34523
    [30] => 35398
    [31] => 35259
    [32] => 35260
    [33] => 19384
    [34] => 35262
    [35] => 36194
    [36] => 29942
    [37] => 35261
    [38] => 33316
    [39] => 30567
    [40] => 28887
    [41] => 29501
    [42] => 23869
    [43] => 28880
    [44] => 23205
)

Но выводятся:
36194
36196
30788
33316
28880
34519
...

$args['orderby'] = 'none'; не помогает а наоборот сортирует по порядку

перезапись
$wp_query->query_vars->orderby = "";
$wp_query->query_vars->order = "";

ничего не даёт
даже тупо query_posts($args); ничего не меняет
проверял может чего не подхватывает но $args['nopaging'] = 1; работает прекрасно
  • Вопрос задан
  • 865 просмотров
Решения вопроса 1
@80689248440 Автор вопроса
Это гениально! $args['orderby'] = 'post__in';
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
MetaDone
@MetaDone
Хорошо сформулированный вопрос - 50% решения
$args['post__in'] = implode(",",$p_id);
а еще в $args нужно вписать
и вообще все лучше сделать через WP_Query, а не через query_posts
И не очень понятно зачем дергать mysql напрямую, это ж аццкий костыль, для выборки таких товаров используйте wpdb
Ответ написан
Punkie
@Punkie
Попробуйте сконструировать ваш wp_query через этот сервис: https://generatewp.com/wp_query/ - там в том числе можно выставить orderby = "none".
Возможно вы где-то ошиблись в мелочи или знаке и просто не видите очевидную ошибку. По приведённому коду сказать трудно. Непонятна сама цель такого вывода. Ведь в каком-то же порядке должны посты вывестись всё таки, верно?
Ответ написан
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Крил: боже упаси такой код использовать, у вас там sql-injection! Я уж молчу про опасный output. Это раз. Два - прямой коннект в БД и низкоуровневый sql-запрос внутри среды WP - полный кретинизм. Три - читайте про хуки. У WooCommerce (и у WP) масса полезных для таких задач событий и фильтров.

Сделайте шаг назад, избавьтесь от этого дырявого говнокода. Поставьте четко задачу. Тогда можно будет сделать все правильно.

ЗЫ: По приведенной вами ссылке код нормальный, а у вас получился кошмар.
Ответ написан
Ваш ответ на вопрос

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

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