Найпростіші способи змінити порядок сторінок у 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), яке використовується безголовими налаштуваннями 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 та серіалізованим масивом ідентифікаторів публікацій у новому порядку. WordPress потім перебирає цей масив і виконує окремі запити UPDATE wp_posts SET menu_order = %d WHERE ID = %d. На великих сайтах із сотнями сторінок це може генерувати сплеск записів до бази даних — що варто відстежувати, якщо ви перебуваєте у спільному середовищі з обмеженнями частоти запитів.
Обмеження
- Плагін впливає лише на типи публікацій, що підтримують
page-attributes. Власні типи публікацій повинні явно реєструвати'supports' => ['page-attributes']уregister_post_type(). - Пагінація в таблиці списку адміністратора може спричиняти плутанину: перетягування сторінки на початок 2-ї сторінки не розміщує її автоматично після останнього елемента на 1-й сторінці. Перед зміною порядку через межі пагінації потрібно збільшити кількість елементів на сторінці в «Параметрах екрана», щоб бачити всі сторінки на одному екрані.
- Плагін не змінює порядок сторінок у навігаційних меню — вони контролюються окремою структурою
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
Кроки
- Перейдіть до Зовнішній вигляд > Меню.
- Виберіть існуюче меню зі спадного списку або натисніть Створити нове меню.
- На панелі Сторінки зліва відмітьте сторінки, які потрібно включити, і натисніть Додати до меню.
- На панелі Структура меню перетягніть елементи у потрібну послідовність.
- Щоб створити підпункт (дочірній елемент випадаючого меню), перетягніть елемент меню трохи правіше під його передбачуваним батьківським елементом.
- Натисніть Зберегти меню.
Критична відмінність: порядок меню vs. порядок сторінок
Саме тут багато адміністраторів 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 не може перемістити сторінку зі сторінки 2 списку адміністратора на позицію на сторінці 1 за одне перетягування. Збільшіть кількість елементів на сторінці в параметрах екрана перед зміною порядку.
Дочірні сторінки успадковують контекст батьківської: При використанні атрибутів сторінки menu_order обмежується дочірніми сторінками одного батьківського елемента. Дочірня сторінка з menu_order=1 відображатиметься першою серед своїх сестринських сторінок, але її позиція відносно сторінок під іншим батьківським елементом не має значення.
Інвалідація шарів кешування: Після масового оновлення menu_order через SQL або WP-CLI записи об’єктного кешу для запитів сторінок можуть все ще відображати старий порядок. На сайтах, що використовують об’єктне кешування Redis або Memcached, явно очистіть кеш:
wp cache flushНа сайтах із повним кешуванням сторінок (WP Rocket, LiteSpeed Cache, Nginx FastCGI cache) також очистіть кеш сторінок, інакше відвідувачі бачитимуть застарілу навігацію протягом часу TTL кешу.
Споживачі 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-скрипти можна інтегрувати в конвеєри розгортання або планові завдання обслуговування.
Якщо ви керуєте кількома інсталяціями 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), щоб забезпечити майбутні вставки без повної перенумерації. - Для безголових налаштувань 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 для розрахунків візуального зміщення.
