Come ottenere il titolo della voce di menu corrente come variabile?


10

È possibile ottenere la voce di menu corrente come variabile php?

Sto elencando i musei di categoria tramite la voce di menu "musei che supportiamo", quindi mi piacerebbe ottenere i bit "musei che sosteniamo" e mostrarli da qualche parte?

Qualsiasi aiuto apprezzato!

Risposte:


15

Ciò è possibile tramite il filtro wp_nav_menu_objects, che è il posto più semplice per verificare quale voce è la voce di menu corrente, poiché WordPress ha già aggiunto le classi per te .

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

Ora puoi usare questa nuova variabile globale invece del normale titolo. Esempio semplice:

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

Naturalmente, questo funziona solo se si visualizza il menu prima di visualizzare il titolo. Se ne hai bisogno prima (forse <title>nell'elemento?), Dovresti prima renderizzare il menu e poi visualizzarlo in seguito .


ciao Jan - ti stai solo chiedendo se c'è un modo per creare un array di $ menu_item-> figli degli elementi correnti? Ho provato diverse cose ma non andare molto lontano ..!
v3nt

gestito questo con l'aiuto del tuo filtro - rispondi di seguito. Saluti!
v3nt

Jan Fabry / Ho provato a utilizzare wpse16243_wp_nav_menu_objectsper recuperare l'ID del menu corrente. Ma non è coerente. Il passaggio tra la home page e una voce di menu non mi dà sempre la voce di menu corretta - è una specie di "ritardo". Qualche suggerimento su come posso recuperare l'ID del menu corrente?
Steven,

C'è un motivo per cui si prefigge il nome della funzione wpse16243? Vedo questo strano tipo di nome abbastanza comune e mi chiedo di cosa si tratti. Disclaimer: Wordpress noob.
Stephen Watkins,

2
@Steve: Solo un prefisso univoco: WordPress Stack Exchange question number 16243. Se le persone copiano direttamente questo codice, non entrerà in conflitto con altri plugin che potrebbero condividere gli stessi nomi di funzioni.
Jan Fabry,

4

È possibile utilizzare wp_get_nav_menu_items(). Ecco un esempio 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;
}

Quindi chiama functioncon il nome della posizione del menu di navigazione che desideri utilizzare:

<?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

Non sono sicuro di seguire esattamente.

Il "Musei che supportiamo" è generato da un titolo post, titolo pagina, titolo categoria, ecc. (O, se si utilizza un menu di navigazione personalizzato, potrebbe essere un titolo personalizzato).

Cosa stai cercando di fare con questo testo? Dove stai provando a visualizzarlo? Presumo che tu stia provando a visualizzarlo nella pagina dell'indice delle categorie (poiché indichi che lo è current-menu-item)? In tal caso, è sufficiente chiamare <?php single_cat_title(); ?>per generare il titolo della categoria.

Se hai bisogno di ulteriori informazioni sulla categoria, puoi usare qualcosa come:

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

Che rende disponibili le seguenti variabili:

$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)

Se ti trovi in ​​un posto diverso dalla Pagina dell'indice delle categorie, dovrai passare $ catid a queste funzioni.

MODIFICARE:

Dato che hai indicato che "Museums We Support" è un titolo di menu personalizzato, l' approccio più semplice sarebbe quello di rinominare la categoria da "Museums" a "Museums We Support" (nota: puoi lasciare museumsinvariata la lumaca ). Tuttavia, ciò significherebbe che "Museums We Support" verrebbe visualizzato come titolo della categoria ovunque altro potrebbe essere prodotto nel tuo modello. Se questo è accettabile, allora non preoccuparti.

Altrimenti, dovrai usare qualcosa come wp_get_nav_menu_items()( Codex ref ) per prendere il titolo per la voce di menu specifica.


hey chip - è questa pagina; bfami.modernactivity.co.uk/category/museum, quindi sostanzialmente il gatto è "museo", ma voglio mostrare il "MUSEUM CHE SUPPORTIAMO", che è l'etichetta di navigazione (titolo personalizzato) impostata nella pagina dei menu. Pensi che sia possibile afferrarlo in qualche modo?
v3nt,

Questo aiuta. Vedi la mia risposta modifica. Hai un paio di opzioni: rinomina la categoria o usa wp_get_nav_menu_items().
Chip Bennett,

evviva il chip - alla fine ho appena cambiato il titolo della categoria! Ho pensato che ci sarebbe stato un modo semplice per afferrare l'etichetta del menu ...
v3nt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.