web-dev-qa-db-fra.com

Impossible d'obtenir l'ID de menu actuel

J'essaie d'obtenir l'ID de l'élément de menu actuel. J'ai trouvé un fil qui m'a mis sur la bonne voie: Comment obtenir le titre de l'élément de menu actuel comme variable?

C'est le code que j'utilise dans mon fichier function.php:

add_filter( 'wp_nav_menu_objects', 'current_wp_nav_menu_object' );

function current_wp_nav_menu_object( $sorted_menu_items )
{
   foreach ( $sorted_menu_items as $menu_item ) {
        if ( $menu_item->current ) {
            $GLOBALS['current_menu_title'] = $menu_item->title;
            $_SESSION['current_menu_title'] = $menu_item->title;
            break;
        }
    }
    return $sorted_menu_items;
}

Mais il y a un problème ennuyant. Les magasins de données sont toujours le dernier élément de menu cliqué, pas l'élément de menu actuel sur lequel vous avez cliqué.

Disons que j'ai les éléments de menu suivants:

  • Objet 1
  • Point 2
  • Point 3
  • Point 4

(J'utilise echo $_SESSION['current_menu_title'] pour voir le résultat)

En cliquant sur les éléments de menu dans l'ordre suivant, les résultats suivants sont obtenus:

Item 1 -> no output
Item 2 -> outputs Item 1  
Item 4 -> outputs Item 2  
Item 1 -> outputs Item 4  

Pourquoi l'élément de menu sélectionné sur lequel vous avez cliqué n'est-il pas sorti?

3
Steven

Dans la mesure où j'ai vu un objet de menu ne possédant pas la propriété 'current', n'est-ce pas? Pas que je l'ai jamais vu, du moins. Vous pouvez ainsi vous rapprocher de ce que vous demandez en comparant l'ID de publication/de page actuel (get_the_ID()) avec la propriété object_id des éléments, lorsqu'ils correspondent, le boom! vous avez votre menu actuellement sélectionné.

function wpse25992_store_current_id( $items, $menu, $args ) {
    foreach ( $items as $key => $item ) {
        // this is the currently displayed object
        if ( $item->object_id == get_the_ID() )
            $_SESSION['current_menu_title'] = $item->title;
    }

    return $items;
}
add_filter( 'wp_get_nav_menu_items', 'wpse31748_exclude_menu_items', null, 3 );
1
soulseekah