remove o último separador?

4

usando;

$args = array( 'menu' => 'mainmenu', 'container' => 'ul', 'menu_class' => 'span-10 clearfix', 'after'=>'/');
wp_nav_menu($args);

o que me dá; londres / munique / artistas / feiras & eventos / publicações / notícias / contato /

mas usando args (ou similar) eu posso remover o / do contato?

qualquer ajuda seja bem-vinda!

    
por v3nt 28.04.2011 / 16:05

4 respostas

4

Aqui está uma abordagem completamente diferente do problema. Como as barras podem ser consideradas como apresentações, elas não devem entrar no HTML. Usuários sem CSS só conseguem ver uma lista normal.

Você pode usar CSS para mudar o estilo da lista e adicionar barras entre elas.

#nav li { display:inline; }
#nav li:before { content:' / '; }
#nav li:first-child:before { content:''; }

Veja aqui .

Observação: isso não funcionará no IE7 nem em versões mais antigas. O IE7 suporta :first-child mas :before só funciona no IE8.

    
por Geert 28.04.2011 / 18:28
1

Primeiro, +1 para usar o blueprint css :)

Segundo: Sim, os separadores são apenas de apresentação e não devem fazer parte do menu (o leitor de tela que usa pessoas ficaria confuso). Então aqui você tem uma função simples para adicionar separator-css-classes ou quaisquer outras classes adicionais onde quer que você precise delas. Apenas modifique os três vars de acordo com suas necessidades.

E agora, aqui está a função que permite segmentar exatamente um único item de menu de navegação em um local específico em um menu específico. Você só precisa modificar as três primeiras vars $menu_location , $menu_name , & $menu_item às suas necessidades.

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 );

Em seguida, você pode estilizar seu separador conforme necessário em seu arquivo css.

    
por kaiser 28.04.2011 / 20:42
0

Se você puder mover o / para antes dos links ( 'before' => '/' em vez de 'after' => '/' ), isso facilitaria muito a filtragem; você poderia fazer assim:

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 );
    
por John P Bloch 28.04.2011 / 16:33
0

E é assim que você deve poder adicionar o / (mesmo que não seja recomendado). Por alguma razão, isso não funciona como esperado, mesmo se eu obtiver o $args quando eu print_r (consulte # -uncommented code). Acrescenta ao primeiro (no meu testcase) em vez do último elemento.

@John P Bloch @Geert - Você poderia dar uma chance a isso e me dizer se isso funciona errado para você também? Obrigado!

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 );
    
por kaiser 28.04.2011 / 21:07

Tags