Поддержка меню в WordPress 3+ для старых тем

Поддержка меню в WordPress 3+ для старых тем

Установив новый движок WordPress (на момент написания статьи версия 3.0.3), и поставив на него понравившуюся тему, разработанную для предыдущих версий WordPress, я столкнулся с проблемой формирования меню. Думаю, что первое время такие тему будут часто встречаться, поэтому в этой статье я расскажу, как можно реализовать поддержку нового меню в новой версии движка. Но для начала небольшое предисловие.

В более ранних версиях движка WordPress, меню создавалось автоматическим выводом страниц, что усложняло управление ими. Чтобы помимо статических страниц добавить дополнительные элементы, такие как рубки, нам необходимо было обладать определенными познаниями в программировании. С целью привести меню к задуманному автором виду и упорядочить его пользователи использовали разнообразные плагины, модифицировали куски php-кода, писали отдельное меню для статических страниц и отдельное для рублик, создавали дополнительные настройки в управлении темой и т.п.

Учитывая неудобство работы с меню в предыдущих версиях, разработчики реализовали в новом движке WordPress 3+ возможность создания и работы с полноценным меню. Новые возможности теперь позволяют очень быстро и удобно создать одно или сразу несколько одно-, двух- или трехуровневых меню из рубрик, статических страниц и произвольных ссылок при помощи интуитивно понятного конструктора меню.
Теперь рассмотрим следующую ситуацию — вы зашли в вашу админку, перешли в раздел «Меню», а там самое первое сообщение, которые вы видите выглядит так: «Текущая тема не поддерживает создание меню, однако вы можете использовать виджет «Произвольное меню», чтобы добавить любое из созданных здесь меню в боковую колонку темы». После чего у вас возникает вопрос: «Как же все-таки интегрировать новую систему меню в более старые темы WordPress, которые не поддерживают эту функцию?». Сделать это достаточно легко и требует всего несколько минут – необходимо заменить/прописать часть php-кода в двух файлах понравившейся вам темы.

Шаг 1.
Через FTP или встроенный редактор WordPress откройте файл functions.php вашей темы и вставьте следующий код в любое свободное место между символами :

function register_main_menus() {
 register_nav_menus(
  array(
   'primary-menu' => __( 'Primary Menu' )
  )
 );
};
if (function_exists('register_nav_menus')) add_action( 'init', 'register_main_menus' );

Сохраните файл.

Шаг 2.
В той же папке с темой находится файл header.php, который управляет всем, что находится в верхней части вашего сайта. В нем необходимо найти код вывода меню (теги «ul» с классами «nav», «menu» или «navigation»), обычно он выглядит примерно так:

<ul class="page_nav" >
<?php wp_list_pages('title_li=&depth=1&exclude=' . get_inc_pages("pag_exclude_") .'&sort_column=menu_order'); ?>
</ul>

После того как вы отыскали этот код (для простоты поиска советую не забывать про функцию «Поиск» в любом редакторе), необходимо заменить его на:

<?php $menuClass = 'menu';
 $primaryNav = '';
if (function_exists('wp_nav_menu')) {
$primaryNav = wp_nav_menu(array('theme_location' => 'primary-menu','container' => '','fallback_cb' => '','menu_class' => $menuClass,'echo' => false));
 echo($primaryNav); }
else echo($primaryNav); ?>

Не забудьте удалить теги — иначе у вас получится меню в меню. Но при этом не удаляйте ничего лишнего, потому что рядом с кодом для вывода меню могут находиться элементы верстки, которые отвечают за подключение нужных стилей и обеспечение внешнего вида вашего меню.
Сохраните файл и обновите вашу админку, в левой верхней части меню появится сообщение, что теперь ваша тема поддерживает функцию меню. Все, теперь можно спокойно работать с меню.

И напоследок, если в вашей теме предусмотрено использование двух меню одновременно, и вы хотите использовать оба эти меню, то в файле functions.php вашей темы (Шаг 1) необходимо прописать следующий код.

function register_main_menus() {
register_nav_menus(
    array(
    'primary'=>__('Primary Menu'),
    'secondary'=>__('Secondary Menu '),
    )
  );
};
if (function_exists('register_nav_menus')) add_action( 'init', 'register_main_menus' );

Вот и все. Надеюсь, эта статья оказалась полезной и интересной для вас, а прочитав её – вы нашли ответ на интересовавший вас вопрос!

6 комментария к “Поддержка меню в WordPress 3+ для старых тем”

  1. Ребята, не могу по второму пункту найти в Header.php код вывода меню. Помогите пожалуйста?

    1. меню не всегда прописівается точно так(обічно оно в тегах списка находится) ещо не обязательно в хедере все от темі зависит

  2. Отличный пост. В свое время на свое сайте делал меню по этому руководству. Правда было это давно, а сейчас снова потребность появилась.
    Буду заново разбираться)

  3. У меня тема поддерживает 2 меню, поставил код как сказано, в админке все в порядке, появилась что тема поддерживает 2 меню, создал менюшки, сохранил, отметил где какие, а на сайте не чего не видно 🙁 вообще все исчезло.

  4. Сколько времени прошло, до сих пор актуально) отличная статья и 100% рабочая, проверенно.

  5. Здравствуйте! Я проделала что написано и у меня главное меню пропало, то есть в админке есть, а на сайте не отображается? Что делать?

    И еще «Не забудьте удалить теги — иначе у вас получится меню в меню» не поняла какие теги и откуда удалить?

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *