it-swarm.com.de

Die aktuelle Menü-ID kann nicht abgerufen werden

Ich versuche, die aktuelle Menüelement-ID abzurufen. Ich habe einen Thread gefunden, der mich auf den richtigen Weg gebracht hat: Wie erhalte ich den Titel des aktuellen Menüelements als Variable?

Dies ist der Code, den ich in meiner function.php-Datei verwende:

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

Aber es gibt ein ärgerliches Problem. Der Datenspeicher ist immer der zuletzt angeklickte Menüpunkt, nicht der aktuell angeklickte Menüpunkt.

Sagen wir, ich habe die folgenden Menüpunkte:

  • Gegenstand 1
  • Punkt 2
  • Punkt 3
  • Punkt 4

(Ich benutze echo $_SESSION['current_menu_title'] um das Ergebnis zu sehen)

Wenn ich in der folgenden Reihenfolge auf die Menüelemente klicke, erhalte ich die folgenden Ergebnisse:

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

Warum wird der aktuell angeklickte Menüpunkt nicht ausgegeben?

3
Steven

Soweit ich gesehen habe, hat ein Menüobjekt nicht die Eigenschaft 'current', oder? Zumindest nicht, dass ich es jemals gesehen hätte. Sie können sich also Ihren Anforderungen annähern, indem Sie die aktuelle Beitrags-/Seiten-ID (get_the_ID()) mit der Eigenschaft object_id vergleichen, wenn sie übereinstimmt - boom! Sie haben Ihr aktuell ausgewähltes Menü erhalten.

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