Відобразити частину / гілку дерева меню за допомогою wp_nav_menu ()


109

У WP Admin у мене визначене меню, яке виглядає приблизно так:

alt текст

Я хочу мати змогу відображати всі дочірні посилання на бічній панелі кожного разу, коли я перебуваю на батьківській сторінці. Наприклад, якщо користувач перебуває на моїй сторінці "Про нас", я хочу, щоб на бічній панелі відобразився список із 4-х посилань, виділених зеленим кольором.

Я переглянув документацію для wp_nav_menu (), і, здається, немає вбудованого способу вказувати конкретний вузол даного меню, який використовуватиметься як вихідний пункт при генерації посилань.

Я створив рішення для подібної ситуації, яке спиралося на стосунки, створені батьком сторінки, але я шукаю таке, яке спеціально використовує систему меню. Будь-яка допомога буде вдячна.


2
Отже, ви хочете підтримувати все меню як власне меню, але створити власну ходунку, яка відображає його, розширюючи лише активне піддерево? Як цей код , але розширення wp_nav_menu замість wp_list_pages? Нещодавно я зробив щось подібне і міг опублікувати код, якщо це те, що ви шукаєте ...
goldenapples

1
@goldenapples, це саме те, що я після цього. Якщо ви не проти розмістити свій код як відповідь, я був би дуже вдячний.
jessegavin

1
Цікаво, що така очевидна корисна функціональність ще не побудована. Це в цілому дуже корисно для будь-якого веб-сайту, на якому є "CMS".
хакре

Я намагаюся вирішити вищевказану проблему чи щось подібне. В якості альтернативи я придумав CSS рішення тут: stackoverflow.com/q/7640837/518169
hyperknot

Відповіді:


75

Це все ще було на моїй думці, тому я переглянув це і склав це рішення, яке не дуже покладається на контекст:

add_filter( 'wp_nav_menu_objects', 'submenu_limit', 10, 2 );

function submenu_limit( $items, $args ) {

    if ( empty( $args->submenu ) ) {
        return $items;
    }

    $ids       = wp_filter_object_list( $items, array( 'title' => $args->submenu ), 'and', 'ID' );
    $parent_id = array_pop( $ids );
    $children  = submenu_get_children_ids( $parent_id, $items );

    foreach ( $items as $key => $item ) {

        if ( ! in_array( $item->ID, $children ) ) {
            unset( $items[$key] );
        }
    }

    return $items;
}

function submenu_get_children_ids( $id, $items ) {

    $ids = wp_filter_object_list( $items, array( 'menu_item_parent' => $id ), 'and', 'ID' );

    foreach ( $ids as $id ) {

        $ids = array_merge( $ids, submenu_get_children_ids( $id, $items ) );
    }

    return $ids;
}

Використання

$args = array(
    'theme_location' => 'slug-of-the-menu', // the one used on register_nav_menus
    'submenu' => 'About Us', // could be used __() for translations
);

wp_nav_menu( $args );

Прекрасна техніка! Чи можу я запитати щось, можливо, стосовно цього: Як би ви відображали вміст цих перелічених сторінок підменю в шаблоні?
daniel.tosaba

2
@ daniel.tosaba вам потрібно буде підкласи або використовувати фільтри в Walker_Nav_Menuкласі. Як і всі елементи меню занадто багато для коментарів - задайте нове запитання про це?
Рарст


3
Така фантастична відповідь. Дуже дякую. Це дійсно має бути опцією за замовчуванням у WordPress.
дотти

3
Дійсно акуратний. Якщо хтось зацікавлений, зробіть те саме, але за ідентифікатором сторінки, змініть wp_filter_object_listрядок наwp_filter_object_list( $items, array( 'object_id' => $args->submenu ), 'and', 'ID' );
Ben

14

@goldenapples: Ваш уокер- клас не працює. Але ідея справді гарна. Я створив ходунку на основі вашої ідеї:

class Selective_Walker extends Walker_Nav_Menu
{
    function walk( $elements, $max_depth) {

        $args = array_slice(func_get_args(), 2);
        $output = '';

        if ($max_depth < -1) //invalid parameter
            return $output;

        if (empty($elements)) //nothing to walk
            return $output;

        $id_field = $this->db_fields['id'];
        $parent_field = $this->db_fields['parent'];

        // flat display
        if ( -1 == $max_depth ) {
            $empty_array = array();
            foreach ( $elements as $e )
                $this->display_element( $e, $empty_array, 1, 0, $args, $output );
            return $output;
        }

        /*
         * need to display in hierarchical order
         * separate elements into two buckets: top level and children elements
         * children_elements is two dimensional array, eg.
         * children_elements[10][] contains all sub-elements whose parent is 10.
         */
        $top_level_elements = array();
        $children_elements  = array();
        foreach ( $elements as $e) {
            if ( 0 == $e->$parent_field )
                $top_level_elements[] = $e;
            else
                $children_elements[ $e->$parent_field ][] = $e;
        }

        /*
         * when none of the elements is top level
         * assume the first one must be root of the sub elements
         */
        if ( empty($top_level_elements) ) {

            $first = array_slice( $elements, 0, 1 );
            $root = $first[0];

            $top_level_elements = array();
            $children_elements  = array();
            foreach ( $elements as $e) {
                if ( $root->$parent_field == $e->$parent_field )
                    $top_level_elements[] = $e;
                else
                    $children_elements[ $e->$parent_field ][] = $e;
            }
        }

        $current_element_markers = array( 'current-menu-item', 'current-menu-parent', 'current-menu-ancestor' );  //added by continent7
        foreach ( $top_level_elements as $e ){  //changed by continent7
            // descend only on current tree
            $descend_test = array_intersect( $current_element_markers, $e->classes );
            if ( !empty( $descend_test ) ) 
                $this->display_element( $e, $children_elements, 2, 0, $args, $output );
        }

        /*
         * if we are displaying all levels, and remaining children_elements is not empty,
         * then we got orphans, which should be displayed regardless
         */
         /* removed by continent7
        if ( ( $max_depth == 0 ) && count( $children_elements ) > 0 ) {
            $empty_array = array();
            foreach ( $children_elements as $orphans )
                foreach( $orphans as $op )
                    $this->display_element( $op, $empty_array, 1, 0, $args, $output );
         }
        */
         return $output;
    }
}

Тепер ви можете використовувати:

<?php wp_nav_menu( 
   array(
       'theme_location'=>'test', 
       'walker'=>new Selective_Walker() ) 
   ); ?>

Вихід - це список, що містить поточний кореневий елемент і це діти (а не їхні діти). Def: Елемент кореня: = Елемент меню верхнього рівня, який відповідає поточній сторінці або є батьківською частиною поточної сторінки або батьківським з батьків ...

Це не точно відповідає на початкове запитання, але майже, оскільки все ще є пункт верхнього рівня. Це добре для мене, тому що я хочу, щоб елемент верхнього рівня був заголовком бічної панелі. Якщо ви хочете позбутися цього, можливо, вам доведеться перекрити display_element або використовувати HTML-аналізатор.


12

Привіт @jessegavin :

Морські меню зберігаються в поєднанні користувацьких типів публікацій та спеціальних таксономій. Кожне меню зберігається як термін (тобто "Про меню" , знайдений в wp_terms) спеціальної таксономії (тобто nav_menu, знайденої в wp_term_taxonomy.)

Кожен елемент меню Nav зберігається у вигляді допису post_type=='nav_menu_item'(тобто "Про фірму" , знайденого в wp_posts) з його атрибутами, що зберігаються як мета meta (in wp_postmeta) з використанням meta_keyпрефікса, _menu_item_*де _menu_item_menu_item_parentє ідентифікатор батьківського елемента пункту меню Вашого меню.

Взаємозв'язок між меню та пунктами меню зберігається wp_term_relationshipsтам, де це object_idстосується $post->IDпункту меню Nav Menu, і $term_relationships->term_taxonomy_idстосується меню, визначеного колективно в wp_term_taxonomyі wp_terms.

Я впевнений, що можна було б підключити і те, 'wp_update_nav_menu'і 'wp_update_nav_menu_item'створити фактичні меню в wp_termsпаралельному наборі відносин, wp_term_taxonomyі wp_term_relationshipsде кожен пункт меню Nav, у якому є пункти меню Sub-Nav, також стає його власним Nav Menu.

Ви також хочете підключити 'wp_get_nav_menus' (що я запропонував додати до WP 3.0 на основі якоїсь подібної роботи, яку я робив кілька місяців тому), щоб переконатися, що створені меню Nav не відображаються користувачем для маніпуляцій адміністратором, інакше вони я б швидко вийшов із синхронізації, і тоді у вас був би кошмар даних.

Це здається цікавим і корисним проектом, але це трохи більше коду та тестування, ніж я можу дозволити собі вирішити зараз частково, тому що все, що синхронізує дані, як правило, є ПДФА, якщо мова йде про прасування всіх помилок (і тому, що Клієнти, що платять, тиснуть на мене, щоб все зробити. :) Але, озброївшись вищенаведеною інформацією, я досить вмотивований розробник плагінів WordPress може кодувати це, якщо захоче.

Звичайно, ви зараз розумієте, якщо ви зробите код, ви зобов'язані опублікувати його тут, щоб ми могли отримати користь від вашої великої! :-)


Я не впевнений, що я стежу за тим, що ви говорите. Я шукаю рішення лише для читання для відображення "підменю", пов’язаного з поточною сторінкою, на якій знаходиться користувач. Ми говоримо про одне й те саме? - Я дуже вдячний за ваше більш глибоке пояснення щодо схеми бази даних.
jessegavin

@jessegavin - Так, якщо ви хочете зателефонувати, wp_nav_menu()тоді вам буде потрібно клонувати меню, тому що wp_nav_menu()тісно пов'язане зі структурою меню . Інший варіант - скопіювати wp_nav_menu()код і внести зміни, необхідні для відображення у підменю.
MikeSchinkel

10

Це розширення для ходок, яке має робити те, що ви шукаєте:

class Selective_Walker extends Walker_Nav_Menu
{

    function walk( $elements, $max_depth) {

        $args = array_slice(func_get_args(), 2);
        $output = '';

        if ($max_depth < -1) //invalid parameter
            return $output;

        if (empty($elements)) //nothing to walk
            return $output;

        $id_field = $this->db_fields['id'];
        $parent_field = $this->db_fields['parent'];

        // flat display
        if ( -1 == $max_depth ) {
            $empty_array = array();
            foreach ( $elements as $e )
                $this->display_element( $e, $empty_array, 1, 0, $args, $output );
            return $output;
        }

        /*
         * need to display in hierarchical order
         * separate elements into two buckets: top level and children elements
         * children_elements is two dimensional array, eg.
         * children_elements[10][] contains all sub-elements whose parent is 10.
         */
        $top_level_elements = array();
        $children_elements  = array();
        foreach ( $elements as $e) {
            if ( 0 == $e->$parent_field )
                $top_level_elements[] = $e;
            else
                $children_elements[ $e->$parent_field ][] = $e;
        }

        /*
         * when none of the elements is top level
         * assume the first one must be root of the sub elements
         */
        if ( empty($top_level_elements) ) {

            $first = array_slice( $elements, 0, 1 );
            $root = $first[0];

            $top_level_elements = array();
            $children_elements  = array();
            foreach ( $elements as $e) {
                if ( $root->$parent_field == $e->$parent_field )
                    $top_level_elements[] = $e;
                else
                    $children_elements[ $e->$parent_field ][] = $e;
            }
        }

        $current_element_markers = array( 'current-menu-item', 'current-menu-parent', 'current-menu-ancestor' );

        foreach ( $top_level_elements as $e ) {

            // descend only on current tree
            $descend_test = array_intersect( $current_element_markers, $e->classes );
            if ( empty( $descend_test ) )  unset ( $children_elements );

            $this->display_element( $e, $children_elements, $max_depth, 0, $args, $output );
        }

        /*
         * if we are displaying all levels, and remaining children_elements is not empty,
         * then we got orphans, which should be displayed regardless
         */
        if ( ( $max_depth == 0 ) && count( $children_elements ) > 0 ) {
            $empty_array = array();
            foreach ( $children_elements as $orphans )
                foreach( $orphans as $op )
                    $this->display_element( $op, $empty_array, 1, 0, $args, $output );
         }

         return $output;
    }

}

На основі коду mfields я посилався у своєму коментарі раніше. Все, що він робить, це перевірити, переходячи до меню, щоб побачити, чи поточний елемент є (1) поточним пунктом меню, або (2) родоначальником поточного пункту меню, і розширює піддерево під ним лише за умови виконання будь-якого з цих умов . Сподіваюся, це працює для вас.

Щоб використовувати його, просто додайте аргумент "ходок", коли ви викликаєте меню, тобто:

<?php wp_nav_menu( 
   array(
       'theme_location'=>'test', 
       'walker'=>new Selective_Walker() ) 
   ); ?>

Ох, я просто перечитав ваше запитання і зрозумів, що спочатку я його неправильно зрозумів. Цей ходок покаже всі інші пункти меню верхнього рівня, лише не розгортайте їх. Це було не саме те, що ви хотіли зробити. Проте цей код можна змінити будь-яким способом. Просто перегляньте цикл $top_level_elementsі додайте власний тест перед викликом $this->display_element.
goldenapples

Чи можна змусити цей клас показати глибину поточної підсторінки? Тобто .. Якщо у мене глибина трьох або більше рівнів, то третій та наступні рівні відображаються для поточної (під) сторінки? На даний момент він показує лише A> B, а не> C (C є третім (рівень)
Золомон

@Zolomon - я не впевнений, що розумію ваше запитання. Це повинно розгорнути все дерево під будь-яким пунктом меню класами "поточне меню-пункт", "поточне меню-батьків" або "поточне меню-предка". Коли я тестую його, він відображає всі рівні підсторінок у меню. Що ти хочеш зробити?
goldenapples

Можливо, ви хочете передати depthпараметр для дзвінка wp_nav_menu, якщо ваша тема якось перевищує значення за замовчуванням 0 (показати всі рівні)?
goldenapples

8

Оновлення: я зробив це у плагін. Завантажте тут .


Мені потрібно було це вирішити самостійно і врешті-решт закінчилося написання фільтра за результатами пошуку меню. Це дозволяє використовувати wp_nav_menuяк звичайне, але вибирати підрозділ меню на основі заголовка батьківського елемента. Додайте submenuпараметр до меню так:

wp_nav_menu(array(
  'menu' => 'header',
  'submenu' => 'About Us',
));

Ви навіть можете зайти в кілька рівнів, поклавши косої риси:

wp_nav_menu(array(
  'menu' => 'header',
  'submenu' => 'About Us/Board of Directors'
));

Або якщо ви віддаєте перевагу з масивом:

wp_nav_menu(array(
  'menu' => 'header',
  'submenu' => array('About Us', 'Board of Directors')
));

Він використовує верблюжну версію заголовка, яка повинна змусити її прощати такі речі, як великі літери та пунктуація.


Чи можна дістатися до підменю за допомогою id? Я маю на увазі ідентифікатор сторінки або ідентифікатор допису.
Digerkam

split () застаріло, замініть $loc = split( "/", $loc );у плагіні на$loc = preg_split( "~/~", $loc );
Floris

Я б також запропонував зробити підменю $ необов'язковим. Таким чином, ви все ще можете отримати все меню за потреби. Додайте це до фільтру вгорі: `if (! Isset ($ args-> підменю)) {return $ items; } `
Флоріс

8

Я склав для себе наступний клас. Він знайде верхній батьківський початковий файл поточної сторінки, або ви можете вказати його цільовий ідентифікатор верхнього наві в конструкторі ходу.

class Walker_SubNav_Menu extends Walker_Nav_Menu {
    var $target_id = false;

    function __construct($target_id = false) {
        $this->target_id = $target_id;
    }

    function walk($items, $depth) {
        $args = array_slice(func_get_args(), 2);
        $args = $args[0];
        $parent_field = $this->db_fields['parent'];
        $target_id = $this->target_id;
        $filtered_items = array();

        // if the parent is not set, set it based on the post
        if (!$target_id) {
            global $post;
            foreach ($items as $item) {
                if ($item->object_id == $post->ID) {
                    $target_id = $item->ID;
                }
            }
        }

        // if there isn't a parent, do a regular menu
        if (!$target_id) return parent::walk($items, $depth, $args);

        // get the top nav item
        $target_id = $this->top_level_id($items, $target_id);

        // only include items under the parent
        foreach ($items as $item) {
            if (!$item->$parent_field) continue;

            $item_id = $this->top_level_id($items, $item->ID);

            if ($item_id == $target_id) {
                $filtered_items[] = $item;
            }
        }

        return parent::walk($filtered_items, $depth, $args);
    }

    // gets the top level ID for an item ID
    function top_level_id($items, $item_id) {
        $parent_field = $this->db_fields['parent'];

        $parents = array();
        foreach ($items as $item) {
            if ($item->$parent_field) {
                $parents[$item->ID] = $item->$parent_field;
            }
        }

        // find the top level item
        while (array_key_exists($item_id, $parents)) {
            $item_id = $parents[$item_id];
        }

        return $item_id;
    }
}

Неймовий дзвінок:

wp_nav_menu(array(
    'theme_location' => 'main_menu',
    'walker' => new Walker_SubNav_Menu(22), // with ID
));

4

@davidn @hakre Привіт, у мене є некрасиве рішення без HTML-парсера або пересувного display_element.

 class Selective_Walker extends Walker_Nav_Menu
    {
        function walk( $elements, $max_depth) {

            $args = array_slice(func_get_args(), 2);
            $output = '';

            if ($max_depth < -1) //invalid parameter
                return $output;

            if (empty($elements)) //nothing to walk
                return $output;

            $id_field = $this->db_fields['id'];
            $parent_field = $this->db_fields['parent'];

            // flat display
            if ( -1 == $max_depth ) {
                $empty_array = array();
                foreach ( $elements as $e )
                    $this->display_element( $e, $empty_array, 1, 0, $args, $output );
                return $output;
            }

            /*
             * need to display in hierarchical order
             * separate elements into two buckets: top level and children elements
             * children_elements is two dimensional array, eg.
             * children_elements[10][] contains all sub-elements whose parent is 10.
             */
            $top_level_elements = array();
            $children_elements  = array();
            foreach ( $elements as $e) {
                if ( 0 == $e->$parent_field )
                    $top_level_elements[] = $e;
                else
                    $children_elements[ $e->$parent_field ][] = $e;
            }

            /*
             * when none of the elements is top level
             * assume the first one must be root of the sub elements
             */
            if ( empty($top_level_elements) ) {

                $first = array_slice( $elements, 0, 1 );
                $root = $first[0];

                $top_level_elements = array();
                $children_elements  = array();
                foreach ( $elements as $e) {
                    if ( $root->$parent_field == $e->$parent_field )
                        $top_level_elements[] = $e;
                    else
                        $children_elements[ $e->$parent_field ][] = $e;
                }
            }

            $current_element_markers = array( 'current-menu-item', 'current-menu-parent', 'current-menu-ancestor' );  //added by continent7
            foreach ( $top_level_elements as $e ){  //changed by continent7
                // descend only on current tree
                $descend_test = array_intersect( $current_element_markers, $e->classes );
                if ( !empty( $descend_test ) ) 
                    $this->display_element( $e, $children_elements, 2, 0, $args, $output );
            }

            /*
             * if we are displaying all levels, and remaining children_elements is not empty,
             * then we got orphans, which should be displayed regardless
             */
             /* removed by continent7
            if ( ( $max_depth == 0 ) && count( $children_elements ) > 0 ) {
                $empty_array = array();
                foreach ( $children_elements as $orphans )
                    foreach( $orphans as $op )
                        $this->display_element( $op, $empty_array, 1, 0, $args, $output );
             }
            */

/*added by alpguneysel  */
                $pos = strpos($output, '<a');
            $pos2 = strpos($output, 'a>');
            $topper= substr($output, 0, $pos).substr($output, $pos2+2);
            $pos3 = strpos($topper, '>');
            $lasst=substr($topper, $pos3+1);
            $submenu= substr($lasst, 0, -6);

        return $submenu;
        }
    }

Перепробувавши їх, рішення Альпа було єдиним, хто працював на мене. Однак одна проблема з цим. Він показує лише дітей першого рівня, але не показує дітей третього чи четвертого рівнів. Я цілими днями намагався домогтися цього. Хтось знає, як змінити його рішення як таке? PS. Це не дозволить мені додавати коментарі, тому потрібно робити це як відповідь.
cchiera

3

Вихід у меню наві включає багато класів для поточного елемента, предка поточного елемента тощо. У деяких ситуаціях я мав змогу робити те, що ви хочете зробити, відпустивши весь вихідний файл дерева nav, а потім використовуючи css, щоб звести його до лише діти поточної сторінки тощо.


3

Я зробив модифіковану ходунку, яка повинна допомогти! Не ідеально - він залишає кілька порожніх елементів, але це робить свою справу. Модифікація - це в основному ті біти $ current_branch. Сподіваюся, це комусь допоможе!

class Kanec_Walker_Nav_Menu extends Walker {
/**
 * @see Walker::$tree_type
 * @since 3.0.0
 * @var string
 */
var $tree_type = array( 'post_type', 'taxonomy', 'custom' );

/**
 * @see Walker::$db_fields
 * @since 3.0.0
 * @todo Decouple this.
 * @var array
 */
var $db_fields = array( 'parent' => 'menu_item_parent', 'id' => 'db_id' );

/**
 * @see Walker::start_lvl()
 * @since 3.0.0
 *
 * @param string $output Passed by reference. Used to append additional content.
 * @param int $depth Depth of page. Used for padding.
 */
function start_lvl(&$output, $depth) {
    $indent = str_repeat("\t", $depth);
    $output .= "\n$indent<ul class=\"sub-menu\">\n";
}

/**
 * @see Walker::end_lvl()
 * @since 3.0.0
 *
 * @param string $output Passed by reference. Used to append additional content.
 * @param int $depth Depth of page. Used for padding.
 */
function end_lvl(&$output, $depth) {
    global $current_branch;
    if ($depth == 0) $current_branch = false;
    $indent = str_repeat("\t", $depth);
    $output .= "$indent</ul>\n";
}

/**
 * @see Walker::start_el()
 * @since 3.0.0
 *
 * @param string $output Passed by reference. Used to append additional content.
 * @param object $item Menu item data object.
 * @param int $depth Depth of menu item. Used for padding.
 * @param int $current_page Menu item ID.
 * @param object $args
 */
function start_el(&$output, $item, $depth, $args) {
    global $wp_query;
    global $current_branch;

    // Is this menu item in the current branch?
    if(in_array('current-menu-ancestor',$item->classes) ||
    in_array('current-menu-parent',$item->classes) ||
    in_array('current-menu-item',$item->classes)) {
        $current_branch = true; 
    }

    if($current_branch && $depth > 0) {
        $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

        $class_names = $value = '';

        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
        $classes[] = 'menu-item-' . $item->ID;

        $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
        $class_names = ' class="' . esc_attr( $class_names ) . '"';

        $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
        $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';

        $output .= $indent . '<li' . $id . $value . $class_names .'>';

        $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
        $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
        $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
        $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';

        $item_output = $args->before;
        $item_output .= '<a'. $attributes .'>';
        $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
        $item_output .= '</a>';
        $item_output .= $args->after;

        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }

}

/**
 * @see Walker::end_el()
 * @since 3.0.0
 *
 * @param string $output Passed by reference. Used to append additional content.
 * @param object $item Page data object. Not used.
 * @param int $depth Depth of page. Not Used.
 */
function end_el(&$output, $item, $depth) {
    global $current_branch;
    if($current_branch && $depth > 0) $output .= "</li>\n";
    if($depth == 0) $current_branch = 0;
}

}


3

Ознайомтеся з кодом у моєму плагіні або використовуйте його за своїм призначенням;)

Цей плагін додає розширений віджет "Меню навігації". Він пропонує безліч параметрів, які можна встановити для налаштування виводу користувальницького меню через віджет.

Особливості включають:

  • Спеціальна ієрархія - "Тільки пов'язані підпункти" або "Тільки суто пов'язані підпункти".
  • Початкова глибина та максимальний рівень для відображення + плоский дисплей.
  • Відобразити всі пункти меню, починаючи з вибраного.
  • Відображати лише прямий шлях до поточного елемента або лише дітей
    вибраного елемента (можливість включити батьківський елемент).
  • Спеціальний клас для блоку віджетів.
  • І майже всі параметри функції wp_nav_menu.

http://wordpress.org/extend/plugins/advanced-menu-widget/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.