15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
23.10.2024

Самые простые способы изменить порядок страниц в 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 при каждом событии перетаскивания.

Установка

  1. В панели управления WordPress перейдите в Плагины > Добавить новый плагин.
  2. Найдите Simple Page Ordering.
  3. Нажмите Установить, затем Активировать.

Переупорядочивание страниц

  1. Перейдите в Страницы > Все страницы.
  2. Наведите курсор на любую строку страницы — слева появится маркер перетаскивания.
  3. Перетащите строки в нужную последовательность.
  4. Отпустите — порядок сохраняется автоматически через 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)

  1. Откройте страницу, которую хотите переупорядочить.
  2. На правой боковой панели нажмите вкладку Страница (не «Блок»).
  3. Прокрутите вниз до раздела Атрибуты страницы.
  4. Найдите поле Порядок и введите целое число.
  5. Нажмите Обновить или Сохранить.

Классический редактор

  1. Откройте редактор страниц.
  2. На правой боковой панели найдите мета-блок Атрибуты страницы.
  3. Введите значение в поле Порядок.
  4. Нажмите Обновить.

Логика упорядочивания

Страницы с меньшими значениями 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

Шаги

  1. Перейдите в Внешний вид > Меню.
  2. Выберите существующее меню из выпадающего списка или нажмите Создать новое меню.
  3. На панели Страницы слева отметьте страницы, которые хотите включить, и нажмите Добавить в меню.
  4. На панели Структура меню перетащите элементы в нужную последовательность.
  5. Чтобы создать дочерний элемент (выпадающий список), перетащите элемент меню немного вправо под предполагаемым родителем.
  6. Нажмите Сохранить меню.

Ключевое различие: порядок меню и порядок страниц

Именно здесь многие администраторы WordPress допускают незаметные ошибки. Рассмотрим такой сценарий: ваша тема использует wp_list_pages() на боковой панели для отображения индекса страниц. Вы переупорядочиваете страницы в «Внешний вид > Меню», но список на боковой панели остаётся неизменным. Это ожидаемое поведение — wp_list_pages() читает menu_order из wp_posts, а не из структуры меню. Чтобы исправить боковую панель, необходимо использовать метод 1 или метод 2.

Метод 4: Полный редактор сайта (блочные темы) — блок навигации

Сайты на блочных темах (Twenty Twenty-Three, Kadence, блочный вариант GeneratePress) используют Полный редактор сайта вместо «Внешний вид > Меню». Блок навигации в FSE имеет собственный интерфейс перетаскивания.

  1. Перейдите в Внешний вид > Редактор.
  2. Нажмите на блок Навигация в шаблоне заголовка.
  3. Используйте панель «Просмотр списка» (значок с тремя линиями на верхней панели инструментов), чтобы увидеть все элементы навигации.
  4. Перетащите элементы в панели «Просмотр списка» для их переупорядочивания.
  5. Нажмите Сохранить.

Базовая модель данных идентична классической системе меню — 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 для расчёта визуальных смещений.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать