Самые простые способы изменить порядок страниц в WordPress (все методы объяснены)
Переупорядочивание страниц в WordPress управляет как структурной иерархией вашего сайта, так и последовательностью отображения страниц в навигационных меню, ответах REST API и списках страниц, генерируемых темой. По умолчанию WordPress присваивает каждой странице значение menu_order равное 0, что означает отображение страниц в алфавитном порядке, если вы явно не переопределите это значение — через настройки документа в блочном редакторе, специальный плагин или прямое изменение базы данных.
В этом руководстве рассматриваются все практические методы переупорядочивания страниц WordPress — от самого быстрого плагина с перетаскиванием до прямых SQL-обновлений menu_order, включая точные сценарии, в которых каждый подход уместен, и случаи, когда каждый из них незаметно даёт сбой.
Почему порядок страниц важен не только для навигации
Большинство руководств рассматривают переупорядочивание страниц как чисто косметическую задачу. Это не так. Столбец menu_order в таблице wp_posts — это целое число, доступное для запросов, которое напрямую влияет на:
- результаты
WP_Queryпри передачеorderby=menu_order— используется многими шаблонами конструкторов страниц и циклами тем - упорядочивание конечных точек REST API (
/wp-json/wp/v2/pages?orderby=menu_order&order=asc), используемых в headless-установках WordPress и мобильных приложениях - плагины хлебных крошек (Yoast SEO, Rank Math), которые определяют иерархию на основе отношений родитель-потомок в сочетании с
menu_order - генерация карты сайта — некоторые SEO-плагины используют
menu_orderдля определения приоритета порядка обхода страниц вsitemap.xml - программные деревья страниц, отображаемые с помощью
wp_list_pages()сsort_column=menu_order
Понимание этого позволяет избежать распространённой ошибки: разработчики переупорядочивают страницы в редакторе меню, считают проблему решённой, а затем обнаруживают, что цикл страниц темы или карта сайта по-прежнему отражают старый алфавитный порядок.
Метод 1: Плагин Simple Page Ordering (рекомендуется для большинства сайтов)
Simple Page Ordering от 10up — наиболее эффективное решение для сайтов с несколькими сотнями страниц. Он перехватывает стандартную таблицу списка в административной панели WordPress и делает каждую строку перетаскиваемой, записывая обновлённые значения menu_order обратно в базу данных через AJAX при каждом событии перетаскивания.
Установка
- В панели управления WordPress перейдите в Плагины > Добавить новый плагин.
- Найдите
Simple Page Ordering. - Нажмите Установить, затем Активировать.
Переупорядочивание страниц
- Перейдите в Страницы > Все страницы.
- Наведите курсор на любую строку страницы — слева появится маркер перетаскивания.
- Перетащите строки в нужную последовательность.
- Отпустите — порядок сохраняется автоматически через AJAX. Кнопка «Сохранить» не требуется.
Что этот плагин делает под капотом
Каждое действие перетаскивания отправляет POST-запрос к wp-admin/admin-ajax.php с действием simple_page_ordering и сериализованным массивом ID записей в новом порядке. WordPress затем перебирает этот массив и выполняет отдельные запросы UPDATE wp_posts SET menu_order = %d WHERE ID = %d. На крупных сайтах с сотнями страниц это может генерировать всплеск операций записи в базу данных — что стоит отслеживать, если вы используете общий хостинг с ограничениями на частоту запросов.
Ограничения
- Плагин влияет только на типы записей, поддерживающие
page-attributes. Пользовательские типы записей должны явно регистрировать'supports' => ['page-attributes']вregister_post_type(). - Пагинация в таблице списка администратора может вызывать путаницу: перетаскивание страницы в начало второй страницы не помещает её автоматически после последнего элемента первой страницы. Перед переупорядочиванием через границы пагинации необходимо увеличить количество элементов на странице в «Параметрах экрана», чтобы видеть все страницы на одном экране.
- Плагин не переупорядочивает страницы в навигационных меню — они управляются отдельной структурой
wp_term_relationships.
Метод 2: Атрибуты страницы — ручное назначение menu_order
WordPress предоставляет поле menu_order нативно как в классическом редакторе, так и в блочном редакторе. Этот метод не требует плагинов и является правильным выбором, когда нужно задать точный числовой порядок для небольшого набора страниц или при программном массовом обновлении.
Блочный редактор (Gutenberg)
- Откройте страницу, которую хотите переупорядочить.
- На правой боковой панели нажмите вкладку Страница (не «Блок»).
- Прокрутите вниз до раздела Атрибуты страницы.
- Найдите поле Порядок и введите целое число.
- Нажмите Обновить или Сохранить.
Классический редактор
- Откройте редактор страниц.
- На правой боковой панели найдите мета-блок Атрибуты страницы.
- Введите значение в поле Порядок.
- Нажмите Обновить.
Логика упорядочивания
Страницы с меньшими значениями menu_order отображаются первыми. Страницы с одинаковым значением упорядочиваются по алфавиту по заголовку. Практическое соглашение:
| Заголовок страницы | Желаемая позиция | Значение `menu_order` |
|---|---|---|
| Главная | 1-я | 1 |
| О нас | 2-я | 2 |
| Услуги | 3-я | 3 |
| Портфолио | 4-я | 4 |
| Контакты | 5-я | 5 |
Оставляйте промежутки между значениями (например, 10, 20, 30), если в будущем планируете вставлять страницы между существующими — это позволит избежать перенумерации всех страниц при каждом добавлении новой.
Программное массовое обновление через WP-CLI
Для сайтов, мигрирующих с другой CMS или реструктурирующих десятки страниц одновременно, редактирование каждой страницы вручную нецелесообразно. Используйте WP-CLI:
wp post update 42 --menu_order=1
wp post update 57 --menu_order=2
wp post update 61 --menu_order=3Или выполните цикл по массиву с помощью shell-скрипта:
declare -A pages=([42]=1 [57]=2 [61]=3 [78]=4)
for post_id in "${!pages[@]}"; do
wp post update "$post_id" --menu_order="${pages[$post_id]}"
doneПрямое обновление базы данных (для опытных пользователей)
Если WP-CLI недоступен и вам нужно массово обновить значения menu_order, можно выполнить SQL напрямую. Всегда делайте резервную копию перед этим.
UPDATE wp_posts SET menu_order = 1 WHERE ID = 42 AND post_type = 'page';
UPDATE wp_posts SET menu_order = 2 WHERE ID = 57 AND post_type = 'page';
UPDATE wp_posts SET menu_order = 3 WHERE ID = 61 AND post_type = 'page';Это особенно удобно при управлении WordPress в среде VPS Хостинга, где у вас есть прямой доступ к MySQL и нужно применять структурные изменения на нескольких сайтах в одном окне обслуживания.
Метод 3: Редактор меню WordPress — переупорядочивание отображения навигации
Редактор «Внешний вид > Меню» управляет порядком отображения страниц в навигационных меню вашего сайта — это полностью отдельно от menu_order в wp_posts. Изменения здесь не влияют на результаты WP_Query, ответы REST API или вывод wp_list_pages().
Используйте этот метод, когда:
- Ваша тема отображает навигацию из зарегистрированного расположения меню (практически все современные темы)
- Вы хотите, чтобы порядок страниц в навигационной панели отличался от структурного
menu_order, используемого в списках страниц - Вам нужно вложить страницы как дочерние элементы (выпадающие списки) без изменения их фактического родителя в WordPress
Шаги
- Перейдите в Внешний вид > Меню.
- Выберите существующее меню из выпадающего списка или нажмите Создать новое меню.
- На панели Страницы слева отметьте страницы, которые хотите включить, и нажмите Добавить в меню.
- На панели Структура меню перетащите элементы в нужную последовательность.
- Чтобы создать дочерний элемент (выпадающий список), перетащите элемент меню немного вправо под предполагаемым родителем.
- Нажмите Сохранить меню.
Ключевое различие: порядок меню и порядок страниц
Именно здесь многие администраторы WordPress допускают незаметные ошибки. Рассмотрим такой сценарий: ваша тема использует wp_list_pages() на боковой панели для отображения индекса страниц. Вы переупорядочиваете страницы в «Внешний вид > Меню», но список на боковой панели остаётся неизменным. Это ожидаемое поведение — wp_list_pages() читает menu_order из wp_posts, а не из структуры меню. Чтобы исправить боковую панель, необходимо использовать метод 1 или метод 2.
Метод 4: Полный редактор сайта (блочные темы) — блок навигации
Сайты на блочных темах (Twenty Twenty-Three, Kadence, блочный вариант GeneratePress) используют Полный редактор сайта вместо «Внешний вид > Меню». Блок навигации в FSE имеет собственный интерфейс перетаскивания.
- Перейдите в Внешний вид > Редактор.
- Нажмите на блок Навигация в шаблоне заголовка.
- Используйте панель «Просмотр списка» (значок с тремя линиями на верхней панели инструментов), чтобы увидеть все элементы навигации.
- Перетащите элементы в панели «Просмотр списка» для их переупорядочивания.
- Нажмите Сохранить.
Базовая модель данных идентична классической системе меню — WordPress хранит навигационные меню FSE как записи wp_navigation — но интерфейс редактирования полностью отличается.
Метод 5: Программное переупорядочивание с помощью pre_get_posts
Для разработчиков, создающих пользовательские темы или плагины, наиболее чистый способ принудительно задать порядок страниц без использования значений menu_order в базе данных — подключиться к pre_get_posts и переопределить аргументы запроса перед его выполнением.
add_action( 'pre_get_posts', function( WP_Query $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_post_type_archive( 'page' ) ) {
$query->set( 'orderby', 'menu_order' );
$query->set( 'order', 'ASC' );
}
});Добавьте это в файл functions.php вашей темы или в плагин для конкретного сайта. Это гарантирует, что любой шаблон, использующий основной цикл запросов, будет учитывать menu_order без необходимости редактировать файлы шаблонов.
Сравнение: все методы на одном экране
| Метод | Влияет на `menu_order` в БД | Влияет на отображение навигационного меню | Требует плагин | Лучше всего подходит для |
|---|---|---|---|---|
| Плагин Simple Page Ordering | Да | Нет | Да | Сайты со многими страницами, нетехнические редакторы |
| Атрибуты страницы (поле «Порядок») | Да | Нет | Нет | Небольшие сайты, точный числовой контроль |
| Массовое обновление через WP-CLI | Да | Нет | Нет | Разработчики, миграции, массовые операции |
| Прямое обновление SQL | Да | Нет | Нет | Опытные администраторы с доступом к БД |
| Внешний вид > Меню | Нет | Да | Нет | Только отображение навигации |
| Блок навигации в полном редакторе сайта | Нет | Да | Нет | Блочные темы |
Хук pre_get_posts | Нет | Нет | Нет | Разработчики, переопределяющие поведение запросов |
Распространённые ошибки и граничные случаи
Перетаскивание через границы пагинации: Как отмечалось выше, Simple Page Ordering не может переместить страницу со второй страницы списка администратора на позицию первой страницы за одно перетаскивание. Увеличьте количество элементов на странице в «Параметрах экрана» перед переупорядочиванием.
Дочерние страницы наследуют контекст родителя: При использовании атрибутов страницы menu_order ограничен дочерними страницами одного родителя. Дочерняя страница с menu_order=1 будет отображаться первой среди своих дочерних элементов, но её позиция относительно страниц другого родителя не имеет значения.
Инвалидация слоёв кэша: После массового обновления menu_order через SQL или WP-CLI записи объектного кэша для запросов страниц могут по-прежнему отражать старый порядок. На сайтах, использующих объектное кэширование Redis или Memcached, явно очистите кэш:
wp cache flushНа сайтах с полностраничным кэшем (WP Rocket, LiteSpeed Cache, Nginx FastCGI cache) также очистите кэш страниц, иначе посетители будут видеть устаревшую навигацию в течение всего времени жизни кэша.
Потребители REST API: Если отдельный фронтенд (Next.js, Nuxt, React) получает страницы из REST API WordPress, он должен явно запрашивать orderby=menu_order — порядок по умолчанию в REST API для страниц — по дате по убыванию. Обновите вызовы API соответствующим образом:
GET /wp-json/wp/v2/pages?orderby=menu_order&order=asc&per_page=100Мультисайтовые установки: В WordPress Multisite menu_order задаётся для каждого сайта отдельно. Для выполнения сетевой команды WP-CLI необходимо указывать --url= для каждого дочернего сайта или использовать --network с пользовательским циклом.
Особенности хостинговой среды
Выбор метода может зависеть от вашей хостинговой конфигурации. На управляемом тарифе Виртуального хостинга прямой доступ к базе данных может быть ограничен phpMyAdmin, что делает обновления через WP-CLI или прямой SQL менее удобными — методы с плагином или атрибутами страницы более практичны. На VPS с cPanel у вас, как правило, есть полный доступ к терминалу, что делает WP-CLI наиболее быстрым вариантом для массовых операций. На выделенном Выделенном сервере с root-доступом прямые запросы MySQL и WP-CLI-скрипты можно интегрировать в конвейеры развёртывания или задания cron для технического обслуживания.
Если вы управляете несколькими установками WordPress и вам нужен согласованный порядок страниц во всех средах, наиболее надёжный подход — закодировать назначения menu_order в WP-CLI-скрипте и запускать его как часть процесса развёртывания — это исключает ручные шаги и поддаётся версионному контролю.
Для сайтов, которым требуется профессиональное присутствие по электронной почте наряду с WordPress, сочетание хостинга с выделенным сервисом Почтового хостинга гарантирует, что ваши страницы контактов и поддержки — которые часто должны быть на видном месте — подкреплены столь же надёжной коммуникационной инфраструктурой.
Технический чек-лист ключевых выводов
Перед выбором метода переупорядочивания проверьте следующее:
- Определите, что именно вы переупорядочиваете. Порядок навигационного меню и
menu_orderвwp_postsнезависимы. Убедитесь, какой из них читает ваша тема. - Проверьте цикл страниц вашей темы. Использует ли он
wp_list_pages(), пользовательскийWP_Queryили зарегистрированное расположение меню? Каждый читает из разного источника данных. - Используйте Simple Page Ordering для редакционных рабочих процессов, где нетехнические пользователи регулярно переупорядочивают страницы без участия разработчика.
- Используйте атрибуты страницы или WP-CLI для точности, когда нужны конкретные числовые значения или вы создаёте скрипт миграции.
- Никогда не используйте только «Внешний вид > Меню», если ваша цель — повлиять на списки страниц, управляемые
WP_Query, карты сайта или потребителей REST API. - Очищайте объектный кэш и кэш страниц после любого массового обновления
menu_order, чтобы все слои немедленно отражали новый порядок. - Оставляйте промежутки в нумерации
menu_order(10, 20, 30 вместо 1, 2, 3), чтобы обеспечить возможность будущих вставок без полной перенумерации. - Для headless-установок WordPress всегда явно передавайте
orderby=menu_order&order=ascв запросах REST API — не полагайтесь на порядок по умолчанию.
Часто задаваемые вопросы
Влияет ли изменение порядка страниц в «Внешний вид > Меню» на SEO?
Нет. Порядок навигационного меню не оказывает прямого влияния на menu_order в wp_posts, приоритет в карте сайта или порядок обхода. Однако если ваша тема генерирует хлебные крошки или индексы страниц на основе wp_list_pages(), они определяются menu_order в базе данных — обновите это отдельно с помощью метода 1 или метода 2.
Почему порядок страниц сбрасывается после обновления страницы?
Обычно это происходит, когда плагин или хук темы запускает wp_update_post() при сохранении и явно передаёт menu_order=0. Проверьте активные плагины с хуками add_action('save_post', ...) и убедитесь, не перезаписывает ли какой-либо из них поле menu_order. Плагин Simple Page Ordering не защищает от этого — необходимо найти и исправить конфликтующий хук.
Можно ли переупорядочить страницы без плагина в блочном редакторе?
Да. Откройте любую страницу, перейдите на вкладку Страница на правой боковой панели, разверните Атрибуты страницы и установите целочисленное поле Порядок. Это записывается напрямую в menu_order в wp_posts. Плагин не требуется.
Работает ли Simple Page Ordering с пользовательскими типами записей?
Только если пользовательский тип записи был зарегистрирован с 'supports' => ['page-attributes']. Если вы управляете регистрацией типа записи, добавьте эту строку поддержки. Если это сторонний тип записи, вы можете добавить поддержку программно в functions.php:
add_post_type_support( 'your_post_type_slug', 'page-attributes' );Каково максимальное значение для menu_order?
Столбец menu_order в wp_posts является знаковым 32-битным целым числом (INT(11)), поэтому максимальное значение равно 2,147,483,647. На практике используйте значения не более нескольких сотен — очень большие значения могут вызывать неожиданное поведение в некоторых функциях темы, выполняющих арифметические операции над menu_order для расчёта визуальных смещений.
