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

Готово.

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