remove last separator?

时间:2011-04-28 作者:v3nt

使用;

$args = array( \'menu\' => \'mainmenu\', \'container\' => \'ul\', \'menu_class\' => \'span-10 clearfix\', \'after\'=>\'/\');
wp_nav_menu($args);
这给了我;伦敦/慕尼黑/艺术家/博览会;活动/出版物/新闻/联系人/

但是使用args(或类似的参数)可以从联系人中删除/吗?

欢迎任何帮助!

4 个回复
SO网友:Geert

这是一种完全不同的解决问题的方法。由于斜杠可能被认为是代表性的,因此它们不应该出现在HTML中。没有CSS的用户只能看到一个常规列表。

然后可以使用CSS重新设置列表的样式,并在列表之间添加斜杠。

#nav li { display:inline; }
#nav li:before { content:\' / \'; }
#nav li:first-child:before { content:\'\'; }
Check it out here.

注意:这在IE7及更早版本中不起作用。IE7确实支持:first-child 但是:before 仅适用于IE8。

SO网友:kaiser

第一个+1用于使用blueprint css :)

第二:是的,分隔符只是一种表象,不应该是菜单的一部分(使用人的屏幕阅读器会感到困惑)。因此,这里有一个简单的函数,可以添加分隔符css类或任何其他需要它们的附加类。只需根据您的需要修改这三个变量。

现在,这是一个函数,它可以让您精确定位特定菜单中特定位置的单个导航菜单项。您只需修改前三个变量$menu_location, $menu_name, &;$menu_item 满足您的需求。

function wpse15844_nav_top_classes( $classes, $item ) 
{
    // EDIT HERE: This is the nav menu location slug
    $menu_location = \'top\';
    // EDIT HERE: This is the nav menu name you entered in the admin-UI > Appearance > Menus (Add menu)
    $menu_name = \'Topnav\';

    // Abort if we\'re not with the named menu
    if ( is_nav_menu( $menu_name ) !== true ) 
        return;

    if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_location ] ) )
    {
        $locations = get_nav_menu_locations();

        $menu = wp_get_nav_menu_object( $locations[ $menu_location ] );
        $menu_items = wp_get_nav_menu_items( $menu->term_id );
    }

    // Abort if we\'re not in the specified location
    else 
        return;

    // EDIT HERE: Enter the nr. of the menu item. Currently we\'re adding to the last one.
    $menu_item = intval( count( $menu_items ) );

    if ( $item->menu_order == $menu_item )
    {
        $classes[] = \'span-10 clearfix\';
    }
    else 
    {
        $classes[] = \'span-10 clearfix separator\';
    }

    return $classes;
}
add_filter( \'nav_menu_css_class\', \'wpse15844_nav_top_classes\', 10, 2 );
然后可以根据需要在css文件中设置分隔符的样式。

SO网友:John P Bloch

如果您可以移动/ 至链接之前(\'before\' => \'/\' 而不是\'after\' => \'/\' ), 这将使过滤更加容易;您可以这样做:

function wpse15844_nav_separator_filter( $output, $item, $depth, $args ){
    global $wpse15844_nav_separators;
    if( !isset( $wpse15844_nav_separators ) )
        $wpse15844_nav_separators = array();
    if( isset( $wpse15844_nav_separators[$depth] ) && $wpse15844_nav_separators[$depth] )
        return $output;
    $wpse15844_nav_separators[$depth] = true;
    return substr( $output, strlen( $args->before ) );
}

add_filter( \'walker_nav_menu_start_el\', \'wpse15844_nav_separator_filter\', 10, 4 );

SO网友:kaiser

这就是您应该如何添加/ 之后(即使不建议)。出于某种原因,这并没有像预期的那样起作用,即使我得到了正确的答案$args 当我print_r it(参见#-未注释的代码)。它添加到第一个元素(在我的测试用例中),而不是最后一个元素。

@约翰·P·布洛赫@吉尔特-你能试一下,告诉我这对你来说是否也不合适吗?谢谢

function wpse15844_nav_top_args( $output, $item, $depth, $args ) 
{
    // EDIT HERE: This is the nav menu location slug.
    $menu_location = \'top\';
    // EDIT HERE: This is the nav menu name you entered in the admin-UI > Appearance > Menus (Add menu).
    $menu_name = \'Topnav\';

    // Abort if we\'re not with the named menu
    if ( is_nav_menu( $menu_name ) !== true ) 
        return;

    // You won\'t need the following if statement if you\'re not targeting the last menu item.
    if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_location ] ) )
    {
        $locations = get_nav_menu_locations();

        $menu = wp_get_nav_menu_object( $locations[ $menu_location ] );
        $menu_items = wp_get_nav_menu_items( $menu->term_id );
    }

    // Abort if we\'re not in the specified location - If you\'re not searching for the last item, you won\'t need this one too.
    else 
        return;

    // EDIT HERE: Enter the nr. of the menu item in the second line inside eg. intval( 3 ). Currently we\'re adding to the last one.
    $menu_item = count( $menu_items );
    $menu_item = intval( $menu_item );

    // Add the class
    if ( $item->menu_order !== $menu_item )
    {
        $args->after = \'/\';
        # echo \'<pre>\'; print_r( $args ); echo \'</pre>\';
    }
    else 
    {
        $args->after = \'\';
        # echo \'<pre>\'; print_r( $args ); echo \'</pre>\';
    }

    return $output;
}
add_filter( \'walker_nav_menu_start_el\', \'wpse15844_nav_top_args\', 10, 4 );

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph