Come ottenere il titolo del current-menu-item come variabile?

3 mag 2011, 17:48:43
Visualizzazioni: 33.6K
Voti: 10

È possibile ottenere il current-menu-item come variabile PHP?

Sto elencando la categoria musei tramite la voce di menu 'musei che supportiamo', quindi vorrei ottenere la parte 'musei che supportiamo' e visualizzarla da qualche parte?

Ogni aiuto è apprezzato!

0
Tutte le risposte alla domanda 4
5
15

Questo è possibile filtrando wp_nav_menu_objects, che è il punto più semplice per verificare quale voce è quella corrente nel menu, perché 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 utilizzare questa nuova variabile globale al posto del titolo normale. Un 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 visualizzi il menu prima di visualizzare il titolo. Se ne hai bisogno prima (magari nell'elemento <title>?), dovresti prima generare il menu e poi visualizzarlo in seguito.

4 mag 2011 16:33:14
Commenti

ciao Jan - mi chiedevo se ci fosse un modo per creare un array degli elementi figli di $menu_item->current? Ho provato diverse cose ma non sto ottenendo grandi risultati..!

v3nt v3nt
19 lug 2011 14:00:24

risolto con l'aiuto del tuo filtro - risposta qui sotto. Grazie!

v3nt v3nt
19 lug 2011 15:59:51

Jan Fabry / Ho provato a usare wpse16243_wp_nav_menu_objects per recuperare l'ID del menu corrente. Ma non è consistente. Passando tra la home page e una voce di menu non sempre ottengo la voce corretta - c'è una sorta di "ritardo". Hai qualche suggerimento su come posso recuperare l'ID del menu corrente?

Steven Steven
15 ago 2011 23:00:46

C'è una ragione per cui prefissi il nome della funzione con wpse16243? Vedo questo strano tipo di nome abbastanza comune e mi chiedo cosa significhi. Disclaimer: principiante di WordPress.

Stephen Watkins Stephen Watkins
28 gen 2012 17:32:32

@Steve: È solo un prefisso univoco: WordPress Stack Exchange domanda numero 16243. Se le persone copiano direttamente questo codice, non entrerà in conflitto con altri plugin che potrebbero condividere gli stessi nomi di funzione.

Jan Fabry Jan Fabry
29 gen 2012 12:47:12
0

Puoi utilizzare wp_get_nav_menu_items(). Ecco un esempio di 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) {
            // Controlla se questa voce di menu punta alla pagina corrente
            if ($items[$k]->object_id == $post->ID) {
                $name = $items[$k]->title;
                break;
            }
        }

    }
    return $name;
}

Poi chiama la function con il nome della location del menu di navigazione che vuoi utilizzare:

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

echo $menu_name;
26 lug 2014 06:01:12
0
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;

      // E 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;
}
19 lug 2011 16:00:12
3

Non sono sicuro di aver capito esattamente.

Il testo "Musei che sosteniamo" è generato da un Titolo di Post, Titolo di Pagina, Titolo di Categoria, ecc. (o, se stai usando un Menu di Navigazione Personalizzato, potrebbe essere un Titolo personalizzato).

Cosa stai cercando di fare con questo testo? Dove stai cercando di visualizzarlo? Presumo che tu stia cercando di visualizzarlo nella Pagina Indice della Categoria (dato che indichi che è current-menu-item)? In tal caso, chiama semplicemente <?php single_cat_title(); ?> per visualizzare il Titolo della Categoria.

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

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

Il che rende disponibili le seguenti variabili:

$currentcat=>cat_ID // ID della Categoria
$currentcat=>cat_name // Nome della Categoria (uguale al Titolo)
$currentcat=>category_nicename // Slug della Categoria
$currentcat=>category_description // Descrizione della Categoria
$currentcat=>category_count // Conteggio della Categoria (# di Post con questa Categoria)

Se ti trovi in una posizione diversa dalla Pagina Indice della Categoria, dovrai passare l'$catid a queste funzioni.

MODIFICA:

Dato che hai indicato che "Musei che sosteniamo" è un Titolo di Menu personalizzato, l'approccio più semplice sarebbe rinominare la Categoria da "Musei" a "Musei che sosteniamo" (nota: puoi lasciare lo slug, museums, invariato). Tuttavia, farlo significherebbe che "Musei che sosteniamo" verrà visualizzato come Titolo della Categoria ovunque venga visualizzato nel tuo template. Se questo è accettabile, allora nessun problema.

Altrimenti, dovrai usare qualcosa come wp_get_nav_menu_items() (Riferimento Codex) per ottenere il Titolo per il specifico elemento del menu.

3 mag 2011 18:35:54
Commenti

hey chip - è questa pagina ; http://bfami.modernactivity.co.uk/category/museum/ quindi fondamentalmente la categoria è 'museum' ma voglio mostrare 'MUSEI CHE SUPPORTIAMO' che è l'etichetta di navigazione (titolo personalizzato) impostata nella pagina dei menu. Pensi sia possibile recuperarlo in qualche modo?

v3nt v3nt
3 mag 2011 18:44:29

Questo aiuta. Vedi la mia modifica alla risposta. Hai un paio di opzioni: rinominare la Categoria, o usare wp_get_nav_menu_items().

Chip Bennett Chip Bennett
3 mag 2011 19:11:53

grazie chip - alla fine ho semplicemente cambiato il titolo della categoria! Pensavo solo ci fosse un modo semplice per recuperare l'etichetta del menu...

v3nt v3nt
3 mag 2011 20:02:26