Работа с WP3 Меню

Июль 21st, 2010 |

Наконец авторы ВП реализовали такой необходимый функционал, как меню! В этой статье я описал, как правильно с ним работать и с какими проблемами можно столкнуться.

1. Не нужно вызывать меню по имени, т.к. при переносе оно может быть названо по другому и все CSS стили отвалится. Меню (расположение меню) нужно регистрировать при помощи register_nav_menus
Пример:

register_nav_menus(array(
    'primary' => __('Primary', 'nix'),
));

2. У функции wp_nav_menu есть несколько очень полезных параметров, о которых не стоит забывать.

wp_nav_menu(array( 
    'depth' => 2,                  // Уровень вложенности. В примере двумерное
    'theme_location' => 'primary', // Собственно расположение меню. См. п. 1
    'menu_class' => 'header_menu', // HTML класс для <UL>
    'container' => false           // Отключаем лишнюю обёртку
)); 

3. Проверка того, указал ли пользователь меню для зарегистрированного расположения. См. п. 1

has_nav_menu('primary');

4. Если пользователь не указал меню для расположения, то вылетает лишняя обёртка. Пробовал на WP3.0. Предлагаю решать так:

if (has_nav_menu('primary')) {
    wp_nav_menu( array( 
        'depth' => 1, 'container' => false, 
        'theme_location' => 'primary', 
        'menu_class' => 'header_menu') );
}
else {
    echo '<ul class="header_menu">';
    wp_list_pages( array('depth' => 1, 'title_li' => '' ));
    echo '</ul>';
}

5. Добавляем выбор меню в произвольное место админки

    <select name="">
        <option value="0">- Select -</option>
        <?php $_nav_menus = wp_get_nav_menus( array('orderby' => 'name') );
        foreach( $_nav_menus as $index => $_nav_menu ) { ?>
        <option value="<?php echo attribute_escape($_nav_menu->term_id) ?>" 
             <?php if ($_nav_menu->term_id == get_option('some_menu')) 
                echo 'selected="selected"' ?> >
             <?php echo attribute_escape($_nav_menu->name) ?>
        </option>
        <?php } ?>
    </select>

Выводим это меню:

if (is_nav_menu(get_option('some_menu'))) {
    wp_nav_menu( array( 
        'menu' => get_option('some_menu'), 
        'depth' => 1, 'container' => false, 
        'menu_class' => 'header_menu') );
}

6. Выведем url первого пункта меню:

$locations = get_nav_menu_locations();
if (isset($locations['**menu-location**'])){
    $menu = wp_get_nav_menu_object( $locations['**menu-location**'] );
    $menu_items = wp_get_nav_menu_items($menu->term_id);
    if (count($menu_items)) {
        echo $menu_items[0]->url;
    }
}

There are no comments yet

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*