2013-11-11 3 views
1

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

Как это:

enter image description here

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

Я пробовал использовать $item->description, но я не уверен, где это заполняется в классе ходока. Я попробовал просто переформатировать выход, но безрезультатно.

Вот что у меня есть:

class My_Walker_Nav_Menu extends Walker_Nav_Menu { 
     function start_lvl(&$output, $depth, $item) { 
     $indent = str_repeat("\t", $depth); 
     $output .= "\n$indent<section class=\"sub-menu col-12\"><div class=\"nav-info col-8 right\"><p>". $item->description ."</p></div>"; 
     $output .= "\n$indent<ul class=\"sub-menu-list col-4\">\n"; 
     } 
    } 

Все отлично работает за исключением того, нет описания, где он говорит $item->description. Я знаю, что в Wordpress есть описание, но оно не появляется.

Что мне нужно знать, я думаю, это то, откуда я вытаскиваю описание. Ходок работает, но единственное, о чем не думаю, - это описание.

Заранее спасибо.

ответ

2

Используя комбинацию догадок и исследований, я нашел ответ!

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

Вот часть, которая добавляет описание, где это необходимо, перед подменю.

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

      $output .= $indent . '<li id="menu-item-'. $item->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 .= "\n$indent<section class=\"sub-menu col-12\"><div class=\"nav-info col-8 right\"><p>" . $item->description . "</p></div>\n"; 
      $item_output .= $args->after; 

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

     } 

Впоследствии, я использовал этот метод, чтобы дать подменю мой собственный класс.

 function start_lvl(&$output, $depth) { 
      $indent = str_repeat("\t", $depth); 
      $output .= "\n$indent<ul class=\"sub-menu-list col-4\">"; 
     } 

Проблема была в том, что форматирование было отключено. Увеличился дополнительный div, и я понял, что никогда не закрывал элемент section, который обычно закрывался бы при использовании в методе start_lvl. Поскольку он был в методе start_el, он не закрывался. Итак, я добавил это в конце, чтобы убедиться, что как ul, так и section будут закрываться должным образом.

 function end_lvl(&$output, $depth) { 
      $indent = str_repeat("\t", $depth); 
      $output .= "\n$indent</ul></section>"; 
     } 
    } 

Теперь описание отображается как требуется. Спасибо @Iliya Reyzis за ваш вклад. Хотя мне это прямо не помогло, я ценю, что вы пытаетесь мне помочь.

+0

Я только что написал учебник по этому вопросу, если кому-то это понадобится в будущем. Более подробно об этом, чем о том, что я разместил здесь. http://vincilione.com/wordpress-navigation-description/ – Jacques

0

При добавлении нового ходока, вам нужно привязать его к меню - wp_nav_menu() в параметре walker, как показано в примере -

wp_nav_menu(array(
'container' =>false, 
'menu_class' => 'nav', 
'echo' => true, 
'before' => '', 
'after' => '', 
'link_before' => '', 
'link_after' => '', 
'depth' => 0, 
'walker' => new description_walker()) 
); 

или вы можете фильтровать все параметры меню walker по

add_filter('wp_nav_menu_args' , 'my_description_walker'); 
function my_description_walker($args) { 
    $args['walker'] = new description_walker; 
    return $args; 
} 

description_walker это имя ходок

вы можете попробовать этот ходок и понять это

class description_walker extends Walker_Nav_Menu 
{ 
    function start_el(&$output, $item, $depth, $args) { 
     parent::start_el($output, $item, $depth, $args); 
      $output .= sprintf('<i>%s</i>', esc_html($item->description)); 
     } 
} 
+0

Почему бы вам не использовать '$ item-> description', но не мои? Мой ходун отлично работает, пока описание не появляется вообще. Он заполняет мои пользовательские классы и т. Д. В меню навигации, а также в обычном формате. Просто нет описания. – Jacques

+0

Спасибо за ответ BTW. Я собираюсь проверить это, когда я вернусь к работе утром! – Jacques

+0

Возможно, я что-то пропустил, но я использую ваш код, и описание все еще не существует. – Jacques

Смежные вопросы