15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
23.10.2024
1 +1

Найпростіші способи змінити порядок сторінок у 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 при кожній події скидання.

Встановлення

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

Зміна порядку сторінок

  1. Перейдіть до Сторінки > Всі сторінки.
  2. Наведіть курсор на будь-який рядок сторінки — зліва з’явиться маркер перетягування.
  3. Перетягніть рядки у потрібну послідовність.
  4. Відпустіть — порядок зберігається автоматично через 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)

  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. Натисніть Зберегти меню.

Критична відмінність: порядок меню vs. порядок сторінок

Саме тут багато адміністраторів 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 не може перемістити сторінку зі сторінки 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 для розрахунків візуального зміщення.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати