Cum să obții titlul elementului current-menu-item ca variabilă?
Acest lucru este posibil prin filtrarea wp_nav_menu_objects
, care este cel mai simplu loc pentru a verifica care element este elementul curent din meniu, deoarece WordPress a adăugat deja clasele pentru tine.
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;
}
Acum poți folosi această nouă variabilă globală în locul titlului normal. Exemplu simplu:
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;
}
Desigur, acest lucru funcționează doar dacă afișezi meniul înainte de a afișa titlul. Dacă ai nevoie de el mai devreme (poate în elementul <title>
?), ar trebui să randez mai întâi meniul și apoi să-l afișezi mai târziu.

salut Jan - mă întrebam dacă există o modalitate de a crea un array cu elementele copil ale $menu_item->current? Am încercat câteva lucruri, dar nu prea am avansat..!

Jan Fabry / Am încercat să folosesc wpse16243_wp_nav_menu_objects
pentru a prelua ID-ul meniului curent. Dar nu este consistent. Trecerea între pagina principală și un element de meniu nu îmi oferă întotdeauna elementul corect de meniu - cumva "întârzie". Ai vreo sugestie despre cum pot prelua ID-ul meniului curent?

Există vreun motiv pentru care prefixați numele funcției cu wpse16243
? Văd destul de des acest tip de denumire ciudată și mă întreb care este scopul. Notă: Sunt începător în WordPress.

Poți utiliza funcția wp_get_nav_menu_items()
. Iată un exemplu de funcție
:
<?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) {
// Verifică dacă acest element de meniu trimite către pagina curentă
if ($items[$k]->object_id == $post->ID) {
$name = $items[$k]->title;
break;
}
}
}
return $name;
}
Apoi apelează funcția
cu numele locației a meniului de navigare pe care dorești să-l utilizezi:
<?php
$menu_name = my_get_menu_item_name( 'NAV_MENU_LOCATION_NAME' ); // de ex. 'primary'
echo $menu_name;

// Adaugă filtru pentru obiectele meniului de navigare WordPress
add_filter( 'wp_nav_menu_objects', 'wpse16243_wp_nav_menu_objects' );
// Funcție pentru procesarea elementelor meniului sortat
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;
}
// Funcție pentru obținerea elementelor copil ale unui element de meniu
function get_menu_items_children( $menu_item_id='' )
{
global $wpdb;
// Obține rezultatele din baza de date pentru elementele copil ale meniului
$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;
}

Nu sunt sigur că înțeleg exact.
"Muzee pe care le susținem" este generat de un Titlu de Postare, Titlu de Pagină, Titlu de Categorie etc. (sau, dacă folosești un Meniu de Navigare Personalizat, poate fi un Titlu personalizat).
Ce încerci să faci cu acest text? Unde încerci să-l afișezi? Presupun că încerci să-l afișezi pe Pagina de Index a Categoriei (deoarece menționezi că este current-menu-item
)? Dacă da, pur și simplu apelează <?php single_cat_title(); ?>
pentru a afișa Titlul Categoriei.
Dacă ai nevoie de informații suplimentare despre categorie, poți folosi ceva de genul:
$cat = get_the_category();
$currentcat = $cat[0];
Ceea ce face disponibile următoarele variabile:
$currentcat=>cat_ID // ID-ul Categoriei
$currentcat=>cat_name // Numele Categoriei (Același cu Titlul)
$currentcat=>category_nicename // Slug-ul Categoriei
$currentcat=>category_description // Descrierea Categoriei
$currentcat=>category_count // Numărul de Postări din această Categorie
Dacă te afli într-un loc diferit de Pagina de Index a Categoriei, va trebui să transmiți $catid acestor funcții.
EDITARE:
Deoarece ai indicat că "Muzee pe care le susținem" este un Titlu de Meniu Personalizat, cea mai ușoară abordare ar fi să redenumești Categoria din "Muzee" în "Muzee pe care le susținem" (notă: poți lăsa slug-ul, muzee
, neschimbat). Totuși, făcând acest lucru, "Muzee pe care le susținem" va fi afișat ca Titlul Categoriei oriunde altundeva ar putea fi afișat în șablonul tău. Dacă acest lucru este acceptabil, atunci nu ai probleme.
În caz contrar, va trebui să folosești ceva de genul wp_get_nav_menu_items()
(Referință Codex) pentru a obține Titlul pentru elementul specific din meniu.

hei chip - e vorba de această pagină; http://bfami.modernactivity.co.uk/category/museum/ deci practic categoria este 'museum' dar vreau să afișez 'MUZEELE PE CARE LE SUSȚINEM' care este eticheta de navigare (titlu personalizat) setată în pagina de meniuri. Crezi că e posibil să obții asta cumva?

Asta ajută. Vezi editația mea la răspuns. Ai câteva opțiuni: să redenumești Categoria, sau să folosești wp_get_nav_menu_items()
.
