Как я могу отобразить описание пункта родительского меню с помощью ходоков Wordpress?

Есть ли способ передать переменную из start_el в start_lvl? Я хочу поместить описание меню в оболочку элементов подменю.

class submenu_walker extends Walker_Nav_Menu
{
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        $output .= "\n$indent<ul class='sub-menu'><div class='menu-image-container'><div class='menu-image'></div></div>\n";
    }
    function end_lvl( &$output, $depth = 0, $args = array() ) {
        $indent = str_repeat("\t", $depth);
        $output .= "$indent<div class='clear'></div></ul>\n";
    }
}

Я пытался сохранить описание как переменную в start_el и получить к нему доступ, используя global в start_lvl... но ничего не возвращает.

Я действительно отчаянно нуждаюсь в помощи в этом, так как до сих пор у меня не было результатов или ответов на этот вопрос с точки зрения ответов.

Может кто-нибудь, пожалуйста, помогите мне с этим? Определенно есть некоторые из вас, кто знает, как использовать меню Wordpress Walker.


person Lee    schedule 05.03.2015    source источник
comment
Если вам нужно описание с каждым элементом навигации, вам придется использовать start_el, посмотрите этот учебник: wpbeginner.com/wp-themes/   -  person Syed Qarib    schedule 05.03.2015
comment
@SyedQarib Я не собираюсь добавлять его к каждому элементу, только к первому показанному подменю (ходок, который у меня есть на данный момент, правильно добавляет div изображения, который я могу использовать, но мне просто нужно найти способ используйте описание меню в этой функции)   -  person Lee    schedule 05.03.2015
comment
@SyedQarib Достаточно ли вы знаете о ходячих, чтобы попытаться решить эту проблему?   -  person Lee    schedule 13.03.2015
comment
@SyedQarib Не могли бы вы помочь мне разобраться с этим, пожалуйста?   -  person Lee    schedule 24.03.2015
comment
Извините, отсутствовал в течение некоторого времени.. вот что вы можете попробовать.. поскольку start_lvl выполняется до start_el, поэтому вы не можете передать значение из el в lvl.. попробуйте сделать все это в start_el и сначала добавьте описание и изображение только элемент..   -  person Syed Qarib    schedule 24.03.2015
comment
Не могли бы вы предоставить в качестве ответа? Возможно в базовой форме со сравнением, показывающим разницу между Эль и лвл   -  person Lee    schedule 24.03.2015
comment
Проверьте, помогает ли это: wordpress.stackexchange.com/questions/14037/   -  person Syed Qarib    schedule 24.03.2015
comment
Это уже видели, но, похоже, это просто добавление описания к каждому пункту подменю. Вы можете дать ответ?   -  person Lee    schedule 24.03.2015
comment
Тогда я не понимаю, чего вы пытаетесь достичь ... вы можете управлять описаниями из панели администратора WP ... добавить описания только для тех, с кем вы хотите, чтобы описания отображались ...   -  person Syed Qarib    schedule 24.03.2015
comment
У меня есть описание меню, добавленное в Admin для пункта родительского меню (элемент навигации первого уровня). Я хочу, чтобы это описание отображалось внутри первого элемента подменю ul для каждого родительского элемента. Поэтому я считаю, что для этого потребуется, чтобы start_el включал все элементы дочернего меню, но отображал только описание родительского элемента меню, а не дочерние элементы.   -  person Lee    schedule 24.03.2015


Ответы (2)


Вот как можно использовать этот код, и он отобразит родительское описание. Шаги по его использованию.
1: Скопируйте приведенный ниже класс и вставьте его в файл functions.php.
2: Вызовите меню как

 wp_nav_menu(array(
      'menu_id'=>'',
      'menu_class'=>'',
      'container'=>'',
      'theme_location'=>'#enter theme location#',
      'walker'=> new customize_menu_walker()
    ));
<br/>

3: см. результат.

class customize_menu_walker extends Walker_Nav_Menu
{
 function start_el(&$output, $item, $depth, $args)
      {
           global $wp_query;
           $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

           $class_names = $value = '';

          // $dbclasses=$item->classes;
           $classes = empty( $item->classes ) ? array() : (array) $item->classes;

           $dbclasses=$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
           $class_names = ' class="'. esc_attr( $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;

             //specially for two menu
             //specially for two menu
           //convert string to array
           $dbclassesArr = explode(" ",$dbclasses);

           $item_output .= '<a'. $attributes .'>';

           if(in_array("menu-item-has-children", $dbclassesArr)){
             $description  = ! empty( $item->description ) ? '<span>'.esc_attr( $item->description ).'</span>' : '';//description display here.
           }

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

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

Теперь, после обновления этой функции, в вашем меню будет отображаться описание родительского меню. Вот код.

Благодарю вас.

person Shankaranand    schedule 25.03.2015
comment
Хорошо, хотя я рад, что вы дали ответ, я действительно не думаю, что вы читали мой вопрос, поскольку ваш ответ содержит буквально множество ошибок, в которых говорится, что $description является неопределенной переменной. Просто чтобы быть ясным, не пункт меню имеет описание ... что, как я полагаю, выводит этот класс. Правильный? - person Lee; 25.03.2015
comment
Поместил isset вокруг вывода $description, что устранило ошибки. Но это означает, что описание никогда не выводится. Кроме того, при добавлении start_lvl и end_lvl, которые у меня были изначально, он полностью меняет стиль меню и отображает все элементы во вложенном списке. - person Lee; 25.03.2015

Мне удалось найти решение этого вопроса, который, казалось, оставался без ответа в течение нескольких дней здесь - Как добавить описание родительского меню в меню Wordpress?

person Lee    schedule 26.03.2015