Add Page ID class to nav menu items

We can add custom nav menu classes through the nav_menu_css_class filter.

Example:

The following should add the CSS class wpse-object-id-{object_id} to the <li> tags:

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

where we define the filter callback as:

/**
 * 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;
}

Here the object_id attribute should give us the corresponding page/post ID.

We can see that this attribute originates from the wp_setup_nav_menu_item() core function:

$menu_item->object_id = ! isset( $menu_item->object_id ) 
    ? get_post_meta( $menu_item->ID, '_menu_item_object_id', true ) 
    : $menu_item->object_id;

Leave a Comment