Cum să obții titlul elementului current-menu-item ca variabilă?

3 mai 2011, 17:48:43
Vizualizări: 33.6K
Voturi: 10

Este posibil să obții current-menu-item ca variabilă PHP?

Listez categoria muzeelor prin elementul de meniu 'muzeele pe care le susținem' așa că aș dori să obțin partea cu 'muzeele pe care le susținem' și să o afișez undeva?

Orice ajutor este apreciat!

0
Toate răspunsurile la întrebare 4
5
15

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.

4 mai 2011 16:33:14
Comentarii

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

v3nt v3nt
19 iul. 2011 14:00:24

am reușit cu ajutorul filtrului tău - răspunsul este mai jos. Mulțumesc!

v3nt v3nt
19 iul. 2011 15:59:51

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?

Steven Steven
15 aug. 2011 23:00:46

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.

Stephen Watkins Stephen Watkins
28 ian. 2012 17:32:32

@Steve: Doar un prefix unic: WordPress Stack Exchange question number 16243. Dacă oamenii copiază direct acest cod, nu va intra în conflict cu alte plugin-uri care ar putea avea aceleași nume de funcții.

Jan Fabry Jan Fabry
29 ian. 2012 12:47:12
0

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;
26 iul. 2014 06:01:12
0
// 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;
}
19 iul. 2011 16:00:12
3

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.

3 mai 2011 18:35:54
Comentarii

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?

v3nt v3nt
3 mai 2011 18:44:29

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().

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

mersi chip - am schimbat până la urmă titlul categoriei! Doar credeam că există o cale ușoară de a obține eticheta din meniu...

v3nt v3nt
3 mai 2011 20:02:26