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

S3
На сайте с 29.03.2012
Offline
367
828

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

Нужно добавить в тему 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
152
#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'
) ); ?>

S3
На сайте с 29.03.2012
Offline
367
#2

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

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

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

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

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

S3
На сайте с 29.03.2012
Offline
367
#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.
S3
На сайте с 29.03.2012
Offline
367
#6

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

S3
На сайте с 29.03.2012
Offline
367
#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
152
#8

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

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