¿Eliminar el último separador?

4

utilizando;

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

lo que me da; Londres / Munich / artistas / ferias & eventos / publicaciones / noticias / contacto /

pero utilizando los argumentos (o similares), ¿puedo eliminar el / del contacto?

cualquier ayuda bienvenida!

    
pregunta v3nt 28.04.2011 - 16:05

4 respuestas

4

Aquí hay un enfoque completamente diferente al problema. Dado que las barras diagonales pueden considerarse como una presentación, no deben ir al HTML. Los usuarios sin CSS solo pueden ver una lista regular.

Luego puedes usar CSS para cambiar el estilo de la lista y agregar barras diagonales intermedias.

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

Compruébelo aquí .

Nota: esto no funcionará en IE7 y versiones anteriores. IE7 admite :first-child pero :before solo funciona desde IE8.

    
respondido por el Geert 28.04.2011 - 18:28
1

Primero +1 para usar blueprint css :)

Segundo: Sí, los separadores son solo de presentación y no deberían formar parte del menú (el lector de pantalla que usa a la gente se confundiría). Así que aquí tienes una función simple para agregar separator-css-classes o cualquier otra clase adicional donde la necesites. Solo modifica los tres vars a tus necesidades.

Y ahora aquí está la función que le permite apuntar exactamente a un solo elemento del menú de navegación en una ubicación específica dentro de un menú específico. Solo tienes que modificar los tres primeros vars $menu_location , $menu_name , & $menu_item a sus necesidades.

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

Luego puede aplicar un estilo a su separador según lo necesite desde su archivo css.

    
respondido por el kaiser 28.04.2011 - 20:42
0

Si puede mover / antes de los enlaces ( 'before' => '/' en lugar de 'after' => '/' ), eso facilitaría mucho el filtrado; Podrías hacerlo así:

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

Y así es como deberías poder agregar el / después (incluso si no se recomienda). Por alguna razón, esto no funciona como se esperaba, incluso si obtengo el $args correcto cuando i print_r it (vea # -código sin comentarios). Se agrega al primero (en mi caso de prueba) en lugar del último elemento.

@John P Bloch @Geert - ¿Podría por favor intentarlo y decirme si esto también funciona mal para usted? Gracias!

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

Lea otras preguntas en las etiquetas