При добавлении новой страницы в WordPress — она автоматически добавляется в список страниц в её начале, в области, называемой «
headermenu
» (если у неё нет «родителя«).
Гугление подсказало несколько плагинов, которые могут убрать «ненужные» страницы — но в данном случае это не сработало. Например — Exclude Pages и Advanced Category Excluder. Скорее всего, их назначение убирать страницы именно из списка страниц, формируемого, например, в Виджетах.
Тогда было решено пойти по «сложному» пути — и разобраться самому — как формируется список.
Допустим, у нас есть страница Test, которую мы хотим убрать из списка:
Тема, которая тут используется, называется gchrome.
Для начала — определим какой именно блок отвечает за формирование этого списка:
Теперь открываем файл темы, в данном случае это /usr/local/www/users/rtfm/rtfm.co.ua/wp-content/themes/gchrome/header.php
, и находим там div
, в котором создаётся это меню:
<div class="wrapper"> <div class='container'> <div class='headermenu span-24'>
И сразу в глаза бросается простая выборка из базы данных:
$menupages = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish' AND post_parent = 0 ORDER BY menu_order ASC");
Дальнейшее — дело техники. Редактируем запрос, и «вырезаем» ненужную страницу, например так:
AND ID NOT IN (4564)
В результате получаем такую строку:
$menupages = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish' AND post_parent = 0 AND ID NOT IN (4564) ORDER BY menu_order ASC");
ID
страницы указывается в её URL-е, который «короткая ссылка«, цифры после p=
. Можно отфильтровать по имени, например так:
AND post_title NOT LIKE 'Test'
Результат:
$menupages = $wpdb->get_results("SELECT ID, post_title FROM $wpdb->posts WHERE post_type = 'page' AND post_status = 'publish' AND post_parent = 0 AND post_title NOT LIKE 'Test' ORDER BY menu_order ASC");
Готово.
В конечном итоге — никаких новых плагинов, «мусора» в системе блога. Правда — есть нюанс «отката» этих изменений при обновлении темы (если она ещё обновляется…).