wp_nav_menu() банальная задача, непонятный баг

Sly32
На сайте с 29.03.2012
Offline
303
801

Пишу без особой надежды,но вдруг...

Нужно добавить в тему 3 меню. Что делаю.

Регистрирую области так:


add_theme_support( 'menus' );
if (function_exists('register_nav_menus')){
register_nav_menus( array(
'menu-company' => 'menu-company',
'menu-production' => 'menu-production',
'footer-menu' => 'footer-menu'
));
}

или так


add_action('after_setup_theme', function(){
register_nav_menus( array(
'menu-company' => 'menu-company',
'menu-production' => 'menu-production',
'footer-menu' => 'footer-menu'
) );
});

Создаю 3 меню в теме, регистрирую их в соответсвующих областях, все как кодекс прописал.

пытаюсь вызвать так


if ( has_nav_menu('footer-menu') ) {
echo 'menu exists<br>';
wp_nav_menu( array(
'menu' => 'footer-menu',
'menu_class' =>'menu',
'depth' => 1,
'theme_location' => 'footer-menu'
));
}else{echo "такого меню нет!";}

Общий список страниц, но не то что вбито в меню! При этом проверку проходит, пишет что меню такое есть. гугл молчит на эту тему. Может тут кто подскажет ( хотел написать сталкивался, испугался - заругают)))))

Playerror
На сайте с 28.09.2008
Offline
117
#1

Вы ошиблись функцией вывода нужно было не wp_page_menu, а wp_nav_menu


// Регистрируем меню
function register_my_menus() {
register_nav_menus(
array(
'menu-company' => ( 'menu-company' ),
'menu-production' => ( 'menu-production' ),
'footer-menu' => ( 'footer-menu' )
)
);
}
add_action( 'init', 'register_my_menus' );

//Добавляем на страницу
<?php wp_nav_menu( array(
'theme_location' => 'footer-menu',
'menu_class' =>'menu'
) ); ?>

Sly32
На сайте с 29.03.2012
Offline
303
#2

Playerror, Это уже 10-я версия кода, конечно же nav_menu...

Я вообще в офигении - массив на выходе есть, если взять wp_get_nav_menu_items( 'footer-menu');!!! Причем правильный.

Похоже, проще будет написать функцию обработки массива, чем найти ошибку...

Playerror
На сайте с 28.09.2008
Offline
117
#3
Sly32:
Playerror, Это уже 10-я версия кода, конечно же nav_menu...

Вы писали, что выводит "Общий список страниц" , так вы и вызываете этот список страниц, а не своё меню. Посмотрите на свой код, вывод у вас происходит через функцию "wp_page_menu".

Sly32
На сайте с 29.03.2012
Offline
303
#4
Playerror:
Посмотрите на свой код, вывод у вас происходит через функцию "wp_page_menu".

Слушайте, я же вам ответил, что вывод через wp_nav_menu(). НЕ тот код скопировал. Исправил чтоб вас не смущало.

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


function simple_menu($menu_slug){
$menu_name = $menu_slug;
$menu_items = wp_get_nav_menu_items( $menu_name );
$menu_list = '<ul id="menu-' . $menu_name . '">';

foreach ( (array) $menu_items as $key => $menu_item ){
$menu_list .= '<li><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
}

$menu_list .= '</ul>';
echo $menu_list;

Работает, хотя это в принципе тоже самое. Непонятно.

SeVlad
На сайте с 03.11.2008
Offline
1609
#5
Sly32:
пытаюсь вызвать так

Меню ты обозвал так же, как и область: footer-menu?

Sly32:
 'menu' => 'footer-menu',

Не знаю насколько это можно/нельзя, но как бэ негоже использовать одинаковые значения.

А если так

if ( has_nav_menu('footer-menu') ) {
echo 'menu exists<br>';
wp_nav_menu( array(
'theme_location' => 'footer-menu'
));
}else{echo "такого меню нет!";}

?

И проверь правильно ли зарегистрирована в шаблона область footer-menu. Мож букву где потерял.

Вывод страниц - дефолтное поведение при необнаружении меню в заданной области.

И код Playerrorа из 2го поста вроде тоже как тебя устроит. Единственное что - скобки в значениях ключей - лишние ;)

Sly32:
Работает, хотя это в принципе тоже самое. Непонятно.

Ну да. Из-за наименования меню.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
Sly32
На сайте с 29.03.2012
Offline
303
#6

все решил. Сам себе создал проблему - перекрещивались другие функции

Sly32
На сайте с 29.03.2012
Offline
303
#7

Подниму тему,потому что проблемы некоторые есть.

Если нужно переопределить цикл вывода на странице новостей, то перестают выводиться вообще все меню, кроме дефолтного списка страниц. Мне нужно на страниценовостей выводить код только из одной рубрики. Переопределяю так, в functions.php добавляю фильтр:


function exclude_category($query) {
if ($query->is_home ){
$query->set('cat','1');}
return $query; }
add_filter('pre_get_posts','exclude_category');

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

Playerror
На сайте с 28.09.2008
Offline
117
#8

Sly32, замените add_filter на add_action т.к. это хук, а не фильтр. Возможно заработает :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий