Как известно, в WP есть виджеты — информационные блоки, настраиваемые через админку и видимые на всем сайте одинаково. А если надо чтоб виджет меню был разный на разных страницах? На странице «ВАСЯ» было меню ВАСЯ, а на странице «ПЕТЯ» было меню ПЕТЯ?
Реализовал я все это с помощью $_COOKIES. Сначала создаем в разделе виджетов менюшки, которые нужны. потом идем
wp-includes/default-widgets.php
. Находим класс реализации виджета меню (
class WP_Nav_Menu_Widget extends WP_Widget {
). Вот теперь можно приступить.
Перед декларацией класса пишем
$_COOKIE['left_menu_exist'] = false;
. Это мы говорим, что на странице пока нет меню в левом сайдбаре.
Теперь находим строку с выведением самой меню —
Сейчас объясню. Реализация идет не только через куки, а еще и через доп поля страницы ( поста ).
Сначала мы берем доп поле, в котором говорится, что именно на этой странице нужно выводить другое меню, не то, которое выводится на всем сайте.
Ессесно, доп поле уже заполнено. Оно называется menu, a значение имеет left_scheme, что соответствует названию меню в админке. У вас можем быть и другое, это всего лишь переменные.
Если доп поле равно left_scheme и на странице еще НЕТ меню в слева
if (( $menu[0] == "left_scheme" )&&(!$_COOKIE['left_menu_exist']))
тогда выводим меню с названием left_scheme
wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $menu ) );
и сообщаем о наличии левого меню
$_COOKIE['left_menu_exist'] = true;
однако если же поле не равно left_scheme, то
если у нас не занято место
if(!$_COOKIE[‘left_menu_exist’])
выводим стандартное меню, прописанное в админке
wp_nav_menu( array( ‘fallback_cb’ => », ‘menu’ => $nav_menu ) );
и место занято
$_COOKIE[‘left_menu_exist’] = true;
Вот и все.
Только есть один бок. Таким образом, у вас получается только одно меню в левом сайдбаре. Но раз идея ясна, то можно поставить еще парочку условий, которые будут защищать страницу от такого аггресивного поведения нашего сценария.
Комментарии: