WordPress: убрать страницу из Header-меню

Автор: | 15/05/2014

wordpressПри добавлении новой страницы в WordPress — она автоматически добавляется в список страниц в её начале, в области, называемой «headermenu» (если у неё нет «родителя«).

Гугление подсказало несколько плагинов, которые могут убрать «ненужные» страницы — но в данном случае это не сработало. Например — Exclude Pages и Advanced Category Excluder. Скорее всего, их назначение убирать страницы именно из списка страниц, формируемого, например, в Виджетах.

Тогда было решено пойти по «сложному» пути — и разобраться самому — как формируется список.

Допустим, у нас есть страница Test, которую мы хотим убрать из списка:

rtfm_header

Тема, которая тут используется, называется gchrome.

Для начала — определим какой именно блок отвечает за формирование этого списка:

rtfm_header_2

Теперь открываем файл темы, в данном случае это /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'>

rtfm_header_3

И сразу в глаза бросается простая выборка из базы данных:

$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");

Готово.

В конечном итоге — никаких новых плагинов, «мусора» в системе блога. Правда — есть нюанс «отката» этих изменений при обновлении темы (если она ещё обновляется…).