如何在WordPress中添加对子菜单项描述的支持?

时间:2015-10-24 作者:bakar

我正在制作一个自定义导航漫游器,我想在我的主题中使用wordpress菜单中的描述字段。

对于第一级菜单项,该字段可以正常工作,但当我在子菜单项的描述字段中添加一些内容时,不会输出任何内容。

我正在使用以下自定义导航助行器功能:

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

       $class_names = $value = \'\';

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

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

       $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        ) .\'"\' : \'\';

       $prepend = \'<strong>\';
       $append = \'</strong>\';
       $description  = ! empty( $item->description ) ? \'<img src="\'.esc_attr( $item->description ).\'" />\' : \'\';

       if($depth != 0)
       {
                 $description = $append = $prepend = "";
       }

        $item_output = $args->before;
        $item_output .= \'<a\'. $attributes .\'>\';
        $item_output .= $args->link_before .$prepend.apply_filters( \'the_title\', $item->title, $item->ID ).$append;
        $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 );
        }
}
任何帮助都将不胜感激!

谢谢

阿布

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您正在设置$description 除顶部菜单项外,任何菜单项的空字符串:

   if($depth != 0)
   {
             $description = $append = $prepend = "";
   }
因此,您没有得到任何输出。

SO网友:Dejo Dekic

这么简单的事情有这么多代码:)将此代码添加到函数中。php。

  //Adds description to our menu
 /**
 * Display descriptions in main navigation.
 *
 * CREDIT: Twenty Fifteen 1.0
 * See: http://wordpress.stackexchange.com/questions/14037/menu-items-description-custom-walker-for-wp-nav-menu
 * @param string  $item_output The menu item output.
 * @param WP_Post $item        Menu item object.
 * @param int     $depth       Depth of the menu.
 * @param array   $args        wp_nav_menu() arguments.
 * @return string Menu item with possible description.
 */
 function add_nav_description( $item_output, $item, $depth, $args ) {
if ( \'main-menu\' == $args->theme_location && $item->description ) {
    $item_output = str_replace( $args->link_after . \'</a>\', \'<div class="menu-item-description">\' . esc_html( $item->description ) . \'</div>\' . $args->link_after . \'</a>\', $item_output );
}

return $item_output;
}
add_filter( \'walker_nav_menu_start_el\', \'add_nav_description\', 10, 4 );