Разные меню на разных страницах — WP

1 Авг
2012

Как известно, в WP есть виджеты — информационные блоки, настраиваемые через админку и видимые на всем сайте одинаково. А если надо чтоб виджет меню был разный на разных страницах? На странице «ВАСЯ» было меню ВАСЯ, а на странице «ПЕТЯ» было меню ПЕТЯ?

Реализовал я все это с помощью $_COOKIES. Сначала создаем в разделе виджетов менюшки, которые нужны. потом идем
wp-includes/default-widgets.php
. Находим класс реализации виджета меню (
class WP_Nav_Menu_Widget extends WP_Widget {
). Вот теперь можно приступить.
Перед декларацией класса пишем
$_COOKIE['left_menu_exist'] = false;
. Это мы говорим, что на странице пока нет меню в левом сайдбаре.
Теперь находим строку с выведением самой меню —
wp_nav_menu ( bla-bla-bla )
и заменяем на
$post_meta = get_post_custom($post->ID);
		$menu = $post_meta["menu"];			
		
		if (( $menu[0] == "left_scheme" )&&(!$_COOKIE['left_menu_exist'])){
			wp_nav_menu( array( 'fallback_cb' => '', 'menu' => "left_scheme" ) );
			$_COOKIE['left_menu_exist'] = true;		
		}else{
			if(!$_COOKIE['left_menu_exist']) 
			wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $nav_menu ) );
			$_COOKIE['left_menu_exist'] = true;
		}

Сейчас объясню. Реализация идет не только через куки, а еще и через доп поля страницы ( поста ).
Сначала мы берем доп поле, в котором говорится, что именно на этой странице нужно выводить другое меню, не то, которое выводится на всем сайте.
$post_meta = get_post_custom($post->ID);
		$menu = $post_meta["menu"];

Ессесно, доп поле уже заполнено. Оно называется 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;
Вот и все.
Только есть один бок. Таким образом, у вас получается только одно меню в левом сайдбаре. Но раз идея ясна, то можно поставить еще парочку условий, которые будут защищать страницу от такого аггресивного поведения нашего сценария.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх