Agregar clase de ID de página a los elementos del menú de navegación

2

Me gustaría agregar clases que contengan los números de identificación de página a los elementos <li> en mi menú de navegación. Las clases similares son generadas por wp_page_menu() pero por alguna razón no son generadas por wp_nav_menu() .

Pensé que tal vez podría usar la funcionalidad "walker" (que ahora solo estoy descubriendo) para agregar una clase personalizada a las etiquetas <li> y usar get_post_meta( $item->ID, '_menu_item_object_id', true ); para obtener los números de ID, pero estoy teniendo un infierno de tiempo averiguar cómo hacerlo. Todo el mundo en los diversos foros parece tener preguntas sobre el uso de la clase de walker para submenús, etc., y he probado varios códigos de mis búsquedas, pero nada funciona. Solo necesito una clase personalizada con el ID de página en cada etiqueta <li> .

Mi código de menú actual es el básico:

function abdmenu_nav()
{
wp_nav_menu(
array(
    'theme_location'  => 'header-menu',
    'menu'            => '',
    'container'       => 'div',
    'container_class' => 'menu-{menu slug}-container',
    'container_id'    => '',
    'menu_class'      => 'menu',
    'menu_id'         => '',
    'echo'            => true,
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'items_wrap'      => '<ul>%3$s</ul>',
    'depth'           => 0,
    'walker'          => ''
    )
);
}

Estoy seguro de que esto es más simple de lo que lo estoy haciendo pero nunca antes he tratado con la clase de caminantes. Ni siquiera puedo encontrar nada sobre si es incluso necesario para lo que estoy tratando de hacer. Si es así, ¿cómo lo configuraría?

    
pregunta Shoelaced 31.08.2016 - 21:10

1 respuesta

4

Podemos agregar clases de menú de navegación personalizadas a través del nav_menu_css_class filter .

Ejemplo :

Lo siguiente debería agregar la clase CSS wpse-object-id-{object_id} a las etiquetas <li> :

// Add filter
add_filter( 'nav_menu_css_class', 'wpse_menu_item_id_class', 10, 2 ); 

// Your navigational menu
wp_nav_menu( $args );

// Remove filter
remove_filter( 'nav_menu_css_class', 'wpse_menu_item_id_class', 10, 2 );

donde definimos la devolución de llamada de filtro como:

/**
 * Custom Nav Menu Class For Page ID
 */
function wpse_menu_item_id_class( $classes, $item )
{
    if( isset( $item->object_id ) )
        $classes[] = sprintf( 'wpse-object-id-%d', $item->object_id );

    return $classes;
}

Aquí, el atributo object_id debe proporcionarnos la ID de página / publicación correspondiente.

Podemos ver que este atributo se origina en la función principal wp_setup_nav_menu_item() :

$menu_item->object_id = ! isset( $menu_item->object_id ) 
    ? get_post_meta( $menu_item->ID, '_menu_item_object_id', true ) 
    : $menu_item->object_id;
    
respondido por el birgire 31.08.2016 - 21:36

Lea otras preguntas en las etiquetas