15%

Спести 15% на всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код:

Skills
За начало
23.10.2024
1 +1

Най-лесните начини за пренареждане на страници в WordPress (Всички методи обяснени)

Пренареждането на страници в WordPress контролира както структурната йерархия на вашия сайт, така и последователността, в която страниците се появяват в навигационните менюта, отговорите на REST API и генерираните от темата списъци със страници. По подразбиране WordPress присвоява на всяка страница стойност menu_order от 0, което означава, че страниците се изобразяват по азбучен ред, освен ако изрично не замените тази стойност — чрез настройките на документа в блок редактора, специален плъгин или директна манипулация на базата данни.

Това ръководство обхваща всеки практически метод за пренареждане на WordPress страници, от най-бързия плъгин с плъзгане и пускане до необработени menu_order SQL актуализации, включително точните сценарии, при които всеки подход е подходящ и при кои мълчаливо се проваля.

Защо редът на страниците е важен извън навигацията

Повечето уроци третират пренареждането на страници като чисто козметична грижа. Не е така. Колоната 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 и сериализиран масив от ID-та на публикации в новия им ред. 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 — пренареждане на навигационното показване

Редакторът Appearance > Menus контролира реда, в който страниците се появяват в навигационните менюта на вашия сайт — това е напълно отделно от menu_order в wp_posts. Промените тук не засягат резултатите от WP_Query, отговорите на REST API или изхода от wp_list_pages().

Използвайте този метод, когато:

  • Вашата тема изобразява навигацията от регистрирано местоположение на менюто (практически всички съвременни теми правят това)
  • Искате ред на страниците в навигационната лента, който се различава от структурния menu_order, използван в списъците със страници
  • Трябва да вложите страници като под-елементи (падащи менюта), без да променяте действителния им WordPress родител

Стъпки

  1. Отидете на Appearance > Menus.
  2. Изберете съществуващо меню от падащото меню или кликнете Създай ново меню.
  3. В панела Страници вляво отметнете страниците, които искате да включите, и кликнете Добави към менюто.
  4. В панела Структура на менюто плъзнете елементите в желаната последователност.
  5. За да създадете под-елемент (дете в падащо меню), плъзнете елемент от менюто малко вдясно под предвидения му родител.
  6. Кликнете Запази менюто.

Критично разграничение: ред на менюто срещу ред на страниците

Тук много WordPress администратори въвеждат фини грешки. Разгледайте този сценарий: вашата тема използва wp_list_pages() в странична лента за показване на индекс на страниците. Пренареждате страниците в Appearance > Menus, но списъкът в страничната лента остава непроменен. Това е очаквано поведение — wp_list_pages() чете menu_order от wp_posts, а не от структурата на менюто. За да поправите страничната лента, трябва да използвате Метод 1 или Метод 2.

Метод 4: Редактор на целия сайт (блок теми) — блок за навигация

Сайтовете, работещи с блок теми (Twenty Twenty-Three, Kadence, GeneratePress блок вариант), използват Редактора на целия сайт вместо Appearance > Menus. Блокът за навигация в FSE има собствен интерфейс за плъзгане и пускане.

  1. Отидете на Appearance > Editor.
  2. Кликнете върху блока Навигация в шаблона на заглавката.
  3. Използвайте панела List View (икона с три линии в горната лента с инструменти), за да видите всички навигационни елементи.
  4. Плъзнете елементите в List View, за да ги пренаредите.
  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 актуализацияДаНеНеНапреднали администратори с достъп до БД
Appearance > MenusНеДаНеСамо навигационно показване
Блок за навигация в редактора на целия сайтНеДаНеБлок теми
Кука 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 кеш), изчистете и кеша на страниците, в противен случай посетителите ще виждат остаряла навигация за времето на TTL на кеша.

Потребители на REST API: Ако разделен фронтенд (Next.js, Nuxt, React) извлича страници от WordPress REST API, той трябва изрично да поиска 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 най-бързата опция за масови операции. При самостоятелен Dedicated Server с root достъп, директните MySQL заявки и WP-CLI скриптове могат да бъдат интегрирани в тръбопроводи за внедряване или cron задачи за поддръжка.

Ако управлявате множество WordPress инсталации и се нуждаете от последователен ред на страниците в различни среди, кодирането на присвояванията menu_order в WP-CLI скрипт и изпълнението му като част от процеса на внедряване е най-надеждният подход — елиминира ръчните стъпки и може да се управлява с версии.

За сайтове, разчитащи на професионално присъствие по имейл наред с тяхната WordPress настройка, съчетаването на хостинга с dedicated услуга за имейл хостинг гарантира, че страниците ви за контакт и поддръжка — които често трябва да бъдат на видно място — са подкрепени от еднакво надеждна комуникационна инфраструктура.

Технически контролен списък с ключови изводи

Преди да изберете метод за пренареждане, проверете следното:

  • Идентифицирайте какво всъщност пренареждате. Редът на навигационното меню и menu_order в wp_posts са независими. Потвърдете кое от двете чете вашата тема.
  • Проверете цикъла на страниците на вашата тема. Използва ли wp_list_pages(), персонализиран WP_Query или регистрирано местоположение на меню? Всяко чете от различен източник на данни.
  • Използвайте Simple Page Ordering за редакционни работни процеси, при които нетехнически потребители трябва редовно да пренареждат страници без участие на разработчик.
  • Използвайте Атрибути на страницата или WP-CLI за прецизност, когато се нуждаете от конкретни числови стойности или скриптирате миграция.
  • Никога не използвайте само Appearance > Menus, ако целта ви е да засегнете списъци със страници, управлявани от WP_Query, карти на сайта или потребители на REST API.
  • Изчистете обектния кеш и кеша на страниците след всяка масова актуализация на menu_order, за да гарантирате, че всички слоеве отразяват незабавно новия ред.
  • Оставяйте интервали в номерирането на menu_order (10, 20, 30 вместо 1, 2, 3), за да се приспособят бъдещи вмъквания без пълно преномериране.
  • За безглави WordPress настройки винаги подавайте orderby=menu_order&order=asc изрично в REST API заявките — не приемайте наредба по подразбиране.

Често задавани въпроси

Промяната на реда на страниците в Appearance > Menus засяга ли 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
За начало