Wie erhalte ich den Titel des aktuellen Menüelements als Variable?


10

Ist es möglich, den aktuellen Menüpunkt als PHP-Variable zu erhalten?

Ich liste die Kategorie Museen über den Menüpunkt "Museen, die wir unterstützen" auf, also möchte ich das Bit "Museen, die wir unterstützen" erhalten und irgendwo anzeigen?

Jede Hilfe geschätzt!

Antworten:


15

Dies ist durch Filtern möglich. Dies ist wp_nav_menu_objectsder einfachste Ort, um zu überprüfen, welches Element das aktuelle Menüelement ist, da WordPress die Klassen bereits für Sie hinzugefügt hat .

add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {
        if ( $menu_item->current ) {
            $GLOBALS['wpse16243_title'] = $menu_item->title;
            break;
        }
    }
    return $sorted_menu_items;
}

Sie können jetzt diese neue globale Variable anstelle des normalen Titels verwenden. Einfaches Beispiel:

add_filter( 'single_cat_title', 'wpse16243_single_cat_title' );
function wpse16243_single_cat_title( $cat_title )
{
    if ( isset( $GLOBALS['wpse16243_title'] ) ) {
        return $GLOBALS['wpse16243_title'];
    }
    return $cat_title;
}

Dies funktioniert natürlich nur, wenn Sie das Menü anzeigen, bevor Sie den Titel anzeigen. Wenn Sie es früher benötigen (möglicherweise im <title>Element?), Sollten Sie zuerst das Menü rendern und später anzeigen .


Hallo Jan, fragst du dich nur, ob es eine Möglichkeit gibt, ein Array der Kinder von $ menu_item-> current items zu erstellen? Versuchte mehrere Dinge, kam aber nicht sehr weit ..!
v3nt

schaffte dies mit Hilfe Ihres Filters - antworten Sie unten. Prost!
v3nt

Jan Fabry / Ich habe versucht, wpse16243_wp_nav_menu_objectsdie aktuelle Menü-ID abzurufen. Aber es ist nicht konsequent. Das Umschalten zwischen der Startseite und einem Menüpunkt gibt mir nicht immer den richtigen Menüpunkt - es ist eine Art "Verzögerung". Irgendwelche Vorschläge, wie ich die aktuelle Menü-ID abrufen kann?
Steven

Gibt es einen Grund, warum Sie dem Funktionsnamen ein Vorwort geben wpse16243? Ich sehe diese seltsame Art von Namen ziemlich häufig und frage mich, worum es geht. Haftungsausschluss: Wordpress noob.
Stephen Watkins

2
@Steve: Nur ein eindeutiges Präfix : WordPress Stack Exchange question number 16243. Wenn Benutzer diesen Code direkt kopieren, tritt kein Konflikt mit anderen Plugins auf, die möglicherweise dieselben Funktionsnamen verwenden.
Jan Fabry

4

Sie können verwenden wp_get_nav_menu_items(). Hier ist ein Beispiel function:

<?php
function my_get_menu_item_name( $loc ) {
    global $post;

    $locs = get_nav_menu_locations();

    $menu = wp_get_nav_menu_object( $locs[$loc] );

    if($menu) {

        $items = wp_get_nav_menu_items($menu->term_id);

        foreach ($items as $k => $v) {
            // Check if this menu item links to the current page
            if ($items[$k]->object_id == $post->ID) {
                $name = $items[$k]->title;
                break;
            }
        }

    }
    return $name;
}

Rufen Sie dann das functionmit dem Standortnamen des Navigationsmenüs auf, das Sie verwenden möchten:

<?php
$menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // eg. 'primary'

echo $menu_name;

2
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
function wpse16243_wp_nav_menu_objects( $sorted_menu_items )
{
    foreach ( $sorted_menu_items as $menu_item ) {

        if ($menu_item->current ) {
            $GLOBALS['currentMenuTitle'] = $menu_item->title;
            $GLOBALS['currentMenuID'] = $menu_item->ID;



            break;
        }
    }


    return $sorted_menu_items;
}


function get_menu_items_children( $menu_item_id='' )
{   
    global $wpdb;

      //     AND meta_key='_menu_item_menu_item_parent'

    $myrows = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta JOIN $wpdb->posts ON $wpdb->postmeta.post_id=$wpdb->posts.id WHERE meta_value = '".$menu_item_id."' AND meta_key='_menu_item_menu_item_parent' ORDER BY $wpdb->posts.menu_order ASC" );


    foreach ( $myrows as $menu_item ) {

        $sc = get_object_vars($menu_item);  

        $myrowsb = $wpdb->get_results( "SELECT * FROM $wpdb->postmeta WHERE post_id = '".$sc['post_id']."' AND meta_key='_menu_item_object_id' " );

        foreach ( $myrowsb as $menu_itemb ) {

            $scb = get_object_vars($menu_itemb);    
            $pmIDs[] = $scb['meta_value'];

        }

    }


    return $pmIDs;
}

0

Ich bin mir nicht sicher, ob ich genau folge.

Die "Museen, die wir unterstützen" werden durch einen Beitragstitel, einen Seitentitel, einen Kategorietitel usw. generiert (oder, wenn Sie ein benutzerdefiniertes Navigationsmenü verwenden, kann es sich um einen benutzerdefinierten Titel handeln).

Was versuchst du mit diesem Text zu machen? Wo versuchst du es anzuzeigen? Ich nehme an, Sie versuchen, es auf der Kategorie-Indexseite anzuzeigen (da Sie angeben, dass dies der Fall ist current-menu-item). Wenn ja, rufen Sie einfach an, <?php single_cat_title(); ?>um den Kategorietitel auszugeben.

Wenn Sie zusätzliche Kategoriedaten benötigen, können Sie Folgendes verwenden:

$cat = get_the_category();
$currentcat = $cat[0];

Was die folgenden Variablen zur Verfügung stellt:

$currentcat=>cat_ID // Category ID
$currentcat=>cat_name // Category Name (Same as Title)
$currentcat=>category_nicename // Category Slug
$currentcat=>category_description // Category Description
$currentcat=>category_count // Category Count (# of Posts w/ this Category)

Wenn Sie sich an einem anderen Ort als der Kategorieindexseite befinden, müssen Sie die $ catid an diese Funktionen übergeben.

BEARBEITEN:

Da Sie darauf hingewiesen , dass „Museen We Support“ ist ein benutzerdefiniertes Menü - Titel, die am einfachsten wäre Annäherung an die Kategorie umbenennen von „Museen“ auf „Museen We Support“ (Anmerkung: Sie können die Schnecke verlassen können, museumsunverändert). Dies würde jedoch bedeuten, dass "Museen, die wir unterstützen" als Kategorietitel angezeigt wird, wo immer es in Ihrer Vorlage ausgegeben wird. Wenn das akzeptabel ist, dann keine Sorge.

Andernfalls müssen Sie so etwas wie wp_get_nav_menu_items()( Codex ref ) verwenden, um den Titel für den jeweiligen Menüpunkt abzurufen.


Hey Chip - es ist diese Seite; bfami.modernactivity.co.uk/category/museum Die Katze ist also im Grunde genommen 'Museum', aber ich möchte die 'MUSEEN, DIE WIR UNTERSTÜTZEN' zeigen, die das Navigationsetikett (benutzerdefinierter Titel) ist, das auf der Menüseite festgelegt ist. Denken Sie, dass es möglich ist, das irgendwie zu packen?
3.

Das hilft. Siehe meine Antwort bearbeiten. Sie haben mehrere Möglichkeiten: Benennen Sie die Kategorie um oder verwenden Sie wp_get_nav_menu_items().
Chip Bennett

Prost Chip - habe am Ende nur den Kategorietitel geändert!
Ich
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.