Come ottenere il titolo del current-menu-item come variabile?
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.

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..!

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?

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.

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;

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

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.

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?

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