WP_NAV_MENU中缺少Current_Page_Item

时间:2014-04-23 作者:DamianFox

我正在使用函数wp_nav_menu 像这样:

<?php wp_nav_menu( array( 
                         \'container\' => false,
                         \'echo\' => true,
                         \'before\' => \'\',
                         \'after\' => \'\',
                         \'link_before\' => \'\',
                         \'link_after\' => \'\',
                         \'depth\' => 0,
                         \'walker\' => new my_walker())
                         ); ?>



class my_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 class="menu-item-\'. $item->ID . \'"\' . $value . \'>\';

           $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 = \'<div>\';
           $append = \'</div>\';
           $description  = ! empty( $item->description ) ? \'<span>\'.esc_attr( $item->description ).\'</span>\' : \'\';

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


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

            $output .= apply_filters(\'walker_nav_menu_start_el\', $item_output, $item, $depth, $args);
            }
}
但是在这个菜单里current_page_item 缺少。我的代码有问题吗?如何添加此类
谢谢!

1 个回复
SO网友:Chip Bennett

如果您实际上没有使用自定义导航菜单,为什么不只是输出wp_page_menu() 直接地

问题执行时,您的助行器将永远不会执行(或者更准确地说,您无法控制是否执行),因为您没有通过\'theme_location\' (正确使用)或\'menu\' (次优使用)到args数组。

以下是wp_nav_menu() 输出工程:

WordPress查找\'menu\' 在args数组中定义。该值对应于用户创建的自定义导航菜单的slug。因此,如果用户创建了一个名为“Short Header Menu”的菜单,那么slug将是\'short-header-menu\', 对应于\'menu\' => \'short-header\'menu\'. 如果找到菜单,将使用它\'theme_location\' 在args数组中定义。该值对应于用户指定给主题位置的自定义导航菜单。因此,如果用户创建一个名为“短标题菜单”的菜单,并将其分配给(主题定义的)主题位置“主菜单”(由主题通过register_nav_menus( array( \'primary-menu\' => "Primary Menu 0 0), 这个\'short-header-menu\' 将返回菜单。如果找到,则使用它\'menu\' 也没有\'theme_location\' 定义了args数组,WordPress查询所有用户创建的自定义导航菜单。如果用户创建了自定义导航菜单,WordPress将使用第一个包含菜单项的菜单\'fallback_cb\'.\'menu\' 或\'theme_location\' 到args数组。如果用户(例如您)尚未创建任何自定义导航菜单,则WordPress将输出\'fallback_cb\', 根据定义wp_page_menu().

现在wp_nav_menu() 通过its$args 回退函数的数组,但wp_page_menu() 不接受\'walker\' 参数所以你的自定义步行器被忽略了。

解决方案通过以下方式正确注册自定义导航菜单主题位置register_nav_menus()Appearance -> Menus\'theme_location\' 您的wp_nav_menu() $args 阵列

附录

请注意,如果定制助行器的唯一目的是添加.current-page-item 同学们,那么您根本不需要定制助行器。这个wp_nav_menu() 类向后兼容wp_page_menu(), 也就是说the .current-page-item class is already output by wp_nav_menu().

结束

相关推荐

将CSS添加到管理TinyMCE编辑器以用于自定义按钮

我已经创建了一个插件,在管理编辑页面/帖子区域的TinyMCE编辑器中添加了一个新按钮。我正在尝试按照Wordpress 3.8中的其他按钮对其应用字体图标。我已经创建了一个CSS文件,将如下所示:.mce_mybutton::before { content: \'\\f459\'; } 我所需要做的就是加载编辑器时加载CSS。。。看起来很容易。我试过了add_editor_style() 但很明显,它只是用于主题开发,而不是插件我找到了mce_css 过滤器,但不起作