Intereting Posts
Получить количество виджетов в боковой панели URL rewrite приводит к 404, но все должно работать! Требуется ли meta_query числовые значения для целых чисел? Заголовок заголовка слоя над изображением WordPress thumbnail image Каждый раз, когда я деактивирую пользовательский плагин, сайт сталкивается с критической ошибкой Что происходит с лицензией GPL, когда к ней добавляются коммерческие элементы? Альтернатива WP Remote – управление несколькими сайтами WP на панели управления (обновления, плагины …) Удаление анимации в WordPress Как скрыть определенные должности категории в моем ежемесячном архиве? Поиск не работает. Добавление «<?» К поиску Пользовательский виджет с использованием меню выбора get_categories Скрипты, внешние по отношению к WordPress, вызывают 404 ошибки Добавить код сразу после публикации Сжатие / минимизация темы или W3 Total Cache – что я должен использовать? Использование get_template_part () возвращает параметры загрузки «недопустимый аргумент»

Как заказать по нескольким полям, используя стандартные query_posts?

В нашем archive.php показаны все элементы, соответствующие нашей выбранной категории. Это работает абсолютно нормально.

Затем мы улучшили его, добавив (как раз перед циклом) сортировку и увеличив количество сообщений на страницу по умолчанию 10, например:

 $posts = query_posts($query_string . '&orderby=title&order=asc&posts_per_page=99'); 

Это работает еще лучше.

Теперь, однако, мы хотим отсортировать несколько полей, например menu_order затем title . Я не вижу способа сделать это, используя этот синтаксис query_posts / querystring, который у нас есть. Все примеры кода включают в себя запуск нового WP_Query, теряя следы query_string. Какое решение?

Если вы изменяете основной запрос, всегда используйте pre_get_posts для изменения параметров запроса перед запуском запроса и перед загрузкой шаблона. Это будет наиболее эффективным и не сломает разбивку на страницы. Начиная с v4, orderby принимает массив аргументов, который дает вам возможность иметь различный order для каждого, если необходимо:

 function my_get_posts( $query ){ if( !is_admin() && $query->is_category() && $query->is_main_query() ){ $query->set( 'posts_per_page', -1 ); // show all posts $query->set( 'orderby', array('menu_order' => 'ASC', 'title' => 'ASC') ); } } add_action( 'pre_get_posts', 'my_get_posts' ); 

Существует возможность сортировки более чем на один столбец. См. Здесь .

 $args = array( 'posts_per_page' => 99, 'orderby' => 'menu_order title', 'order' => 'ASC', ); $query = new WP_Query( $args ); // do your stuff here... wp_reset_postdata(); 

Проверьте стандартный цикл и почему вы должны использовать wp_reset_postdata .