Сложности с новым меню WordPress 3.X+

Всем здравствуйте. Теперь не придется писать в каждом посте “… снимаю шляпу… “! Я сменил тему и вынес этот слоган в топбар. Я люблю делать моим читателям приятно и всячески поощрять их очередное появление на “Белой Шляпе”.

Но речь не об этом. Для изменения дизайна я взял тему “IDream” в русском переводе. Написан этот шаблон был еще до того, как появился WordPress 3.0, поэтому новых функций в нем еще не было. Но выпадающее меню на jQuery уже было. Собственно это и стало определяющим моментом, который заставил меня остановится именно на этом шаблоне. А еще это бело-красный дизайн, который я очень люблю.

Трудностей с переработкой темы не было. Я успешно скопировал нижнюю панель bottombar наверх и назвал ее topbar, ограничив по нижнему краю ее скопированным из header выпадающим красным меню. Эту же красную полосу скопировал в самый низ страницы, под блок с копирайтом.

Всю рекламу, счетчики и php файлы, которые считают возраст блога и мой возраст, топ комментаторов и многое другое, я скопировал из старого оформления и как кирпичи уложил в новое с помощью функции include (TEMPLATEPATH . 'ИМЯ ФАЙЛА’)

Возникли сложности с новым, присущим только WordPress 3 и выше меню, которое организуется прямо из админки, и в которое можно добавлять что угодно, это и рубрики, и страницы, и записи, и любые ссылки. Все, что угодно душе веб-мастера.

Сейчас немного теории.

Если у вас тема, изданная до выхода WordPress 3.0, то надо сделать два простых шага:

1. Добавьте в файл function.php вашей темы код:

//добавление выпадающего меню
if (function_exists ('add_theme_support')) {
add_theme_support ('menus');
}

//добавление выпадающего меню

После добавления этого кода в админке WordPress появится пункт “Меню”, в котором можно очень просто создать сколько угодно меню с любыми пунктами. Иерархия пунктов меню создается простым перетаскиванием пунктов.

2. Вставьте в то место, где вы хотите разместить свое меню код:

<?php wp_nav_menu ('menu=top'); ?>

В этом коде top – это название меню, которое вы сами присваиваете ему в админке блога. Это может быть любое слово, написанное латинскими буквами или арабскими цифрами.

В самом элементарном случае меню должно заработать без проблем. С помощью CSS его можно отформатировать по своему вкусу, а используя jQuery, его можно сделать выпадающим. Но есть одно “НО”

Размещая этот код в файлах шаблона мы организовываем стараниями php и WordPress список UL. Если этот список попадет в другой UL, который уже есть в вашем шаблоне, то меню для нового WordPress 3.0 РАБОТАТЬ НЕ БУДЕТ!!!

Так и случилось у меня.

Я с легкой душой, не будучи докой в CSS, создал следующую конструкцию (ВНИМАНИЕ, СЛЕДУЮЩИЙ КОД НЕ КОРРЕКТНЫЙ):

<div id="navouter">
<div id="nav">

<ul id=”dropmenu”>
<!--  Верхнее меню 'top' -->
<?php wp_nav_menu ('menu=top'); ?>
<!--  Конец меню 'top'—>

</ul>
</div>
</div>

Вы видите, что список UL под названием dropmenu содержит другой список, который организуется новой функцией wp_nav_menu (). Естественно, что в таком варианте ничего не работает и меню просто не видно.

Правильное решение содержится в аргументах самой функции для WordPress 3.0. ПРАВИЛЬНО ПИСАТЬ СЛЕДУЮЩИМ ОБРАЗОМ:

<div id="navouter">
<div id="nav">
<!--  Верхнее меню 'top' -->
<?php wp_nav_menu ('menu=top&menu_id=dropmenu'); ?>
<!--  Конец меню 'top'-->
</div>
</div>

Вы видите, что класс dropmenu прописывается в аргументы функции и становится классом создаваемого ею списка. В таком варианте меню работает нормально.

Будьте внимательны и не включайте функцию нового меню WordPress в списки UL, OL или IL!

Короткая ссылка на эту запись для публикации в Twitter и социальных сетях: http://www.eavasi.ru/?p=5667