web-dev-qa-db-fra.com

Remplacer l'élément de menu actuellement sélectionné

J'ai un site WP 3.x que j'utilise principalement comme système de gestion de contenu. Le menu est relié aux différentes pages WordPress.

Une des pages, "News", est la page "posts".

Toutefois, lorsque vous cliquez sur l'un des articles de la page Actualités, l'élément "Actualités" du menu n'est plus mis en évidence car cet article n'est pas traité comme un enfant de "nouvelles".

Existe-t-il un moyen simple de remplacer l’élément actuellement mis en surbrillance dans le menu? Idéalement, en forçant un identifiant de page.

1
Pekka 웃

Puisque je suppose que vous utilisez wp_nav_menu(), il devrait y avoir une classe current_page_parent qui est appliquée à l'élément de menu de la page de vos publications lorsque vous consultez une publication unique.

Vous pouvez utiliser cette classe pour définir l'état "actif", un peu comme vous le faites probablement avec current_page_item pour le moment.

Si (quelle que soit la raison) vous devez également ajouter current_page_item, vous pouvez filtrer le nav_menu_css_class:

/**
 * Add the class 'current_page_item' to 'page for posts' menu item if we're
 * viewing a single post.
 * 
 * @param array $class
 * @param object $item The current menu item.
 * @return array
 */
function add_current_class_to_posts_page( $classes, $item )
{
    static $posts_page;

    if ( ! is_single() )
        return $classes;

    if ( ! isset( $posts_page ) )
        $posts_page = get_option( 'page_for_posts' ); // cache as we may be calling this a lot!

    if ( $item->object == 'page' && $item->object_id == $posts_page )
        $classes[] = 'current_page_item'; // this is the posts page!

    return $classes;
}
add_filter( 'nav_menu_css_class', 'add_current_class_to_posts_page', 10, 2 );
3
TheDeadMedic