Orderby = none не работает

Я пытаюсь установить 'orderby = none' в мой цикл, но он не работает. Вот мой код:

$query = new WP_Query(array('showposts'=>2, 'post__in' => array(99,4,5,2,8,55), 'orderby'=>'none')); 

Может ли кто-нибудь мне помочь?

Благодарю.

Заказ никем не делает того, что вы думаете. Если вы не укажете заказ, то MySQL не гарантирует какой-либо конкретный порядок и просто получит сообщения в том порядке, в котором они есть. Поскольку они были вставлены в определенном порядке, вы, вероятно, получите их в этом порядке.

Так как вам нужны сообщения в определенном порядке (в вашем случае по почтовым идентификаторам с «99,4,5,2,8,55»), то mysql не способен на это без гораздо более сложного предложения ORDERBY. В частности, вам придется использовать это с синтаксисом mySQL:

 ORDER BY FIELD($wpdb->posts.ID,99,4,5,2,8,55); 

… и это не очень легко сделать с механизмом запросов WordPress.

Вы можете использовать фильтр posts_orderby, чтобы сделать что-то вроде этого, с таким кодом:

 function reorder_posts($orderby) { global $wpdb; return "ORDER BY FIELD({$wpdb->posts}.ID,99,4,5,2,8,55)"; } add_filter('posts_orderby', 'reorder_posts'); 

Вы хотите добавить фильтр перед своим запросом, а затем удалить его, чтобы не изменять ничего.

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

Изменить: обратите внимание, что это только что попало в WordPress 3.5, поэтому, когда это выйдет, вы сможете использовать 'orderby'=>'post__in' (это двойной знак подчеркивания), и он будет использовать значение из post__in для заказ.

Билет здесь: http://core.trac.wordpress.org/ticket/13729

Патч здесь: http://core.trac.wordpress.org/changeset/21776

См. Раздел « Принятые параметры заказа и заказа» для функции WPQuery. Для order разрешены только параметры ASC и DESC .

 $query = new WP_Query(array('showposts'=>2, 'post__in' => array(99,4,5,2,8,55), 'orderby'=>'none')); 

Используйте 'orderby'=>'none' not 'order'=>'none'