Geçerli menü öğesi başlığı değişken olarak nasıl alınır?


10

Geçerli menü öğesini bir php değişkeni olarak almak mümkün mü?

Kategori müzelerini 'desteklediğimiz müzeler' menü öğesi aracılığıyla listeliyorum, bu yüzden 'desteklediğimiz müzeler' biraz olsun ve bir yerde görüntülemek istiyorum?

Herhangi bir yardım takdir!

Yanıtlar:


15

Bu, wp_nav_menu_objectshangi öğenin geçerli menü öğesi olduğunu kontrol etmek için en kolay yer olan filtreleme ile mümkündür , çünkü WordPress zaten sınıfları sizin için ekledi .

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

Artık normal başlık yerine bu yeni global değişkeni kullanabilirsiniz. Basit örnek:

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

Tabii ki, bu sadece başlığı görüntülemeden önce menüyü görüntülerseniz işe yarar. Daha önce ihtiyacınız varsa (belki <title>öğede?), Önce menüyü oluşturmalı ve daha sonra görüntülemelisiniz .


merhaba Jan - sadece $ menu_item-> mevcut öğelerin çocuklarının bir dizi oluşturmak için bir yol olup olmadığını merak? Birkaç şey denedim ama çok uzağa gitmiyorum ..!
v3nt

bunu filtrenizin yardımıyla yönetti - aşağıdaki cevabı. Şerefe!
v3nt

Jan Fabry / wpse16243_wp_nav_menu_objectsGeçerli menü kimliğini almak için kullanmayı denedim . Ama tutarlı değil. Ana sayfa ve bir menü öğesi arasında geçiş yapmak bana her zaman doğru menü öğesini vermez - bu tür bir "gecikmeler". Geçerli menü kimliğini nasıl alabileceğime dair herhangi bir öneriniz var mı?
Steven

İşlev adını önceden yazmanızın bir nedeni var mı wpse16243? Bu garip ismi oldukça yaygın görüyorum ve bunun ne hakkında olduğunu merak ediyorum. Feragatname: Wordpress çaylak.
Stephen Watkins

2
@Steve: Sadece benzersiz önek: WordPress Stack Exchange question number 16243. Kullanıcılar bu kodu doğrudan kopyalarsa, aynı işlev adlarını paylaşabilecek diğer eklentilerle çakışmaz.
Jan Fabry

4

Kullanabilirsiniz wp_get_nav_menu_items(). İşte bir örnek 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;
}

Ardından çağrı functionile Konum adının ait nav menüsüne Eğer kullanım isteyen:

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

Tam olarak takip ettiğimden emin değilim.

"Desteklediğimiz Müzeler", bir Yazı Başlığı, Sayfa Başlığı, Kategori Başlığı vb. Tarafından oluşturulur (veya Özel Gezinme Menüsü kullanıyorsanız özel bir Başlık olabilir).

Bu metinle ne yapmaya çalışıyorsunuz? Nerede göstermeye çalışıyorsunuz? Kategori Dizini Sayfasında göstermeye çalıştığınızı varsayıyorum (belirttiğinizden beri current-menu-item)? Öyleyse <?php single_cat_title(); ?>Kategori Başlığı'nın çıktısını almanız yeterlidir .

Ek kategori bilgilerine ihtiyacınız varsa, aşağıdakiler gibi bir şey kullanabilirsiniz:

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

Bu, aşağıdaki değişkenleri kullanılabilir kılar:

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

Eğer bir yere iseniz diğer Kategori Endeksi Sayfa yerine, bu işlevler $ CatID geçmesi gerekir.

DÜZENLE:

"Desteklediğimiz Müzeler" in özel bir Menü Başlığı olduğunu belirttiğiniz için, en kolay yaklaşım Kategoriyi "Müzeler" den "Desteklediğimiz Müzeler" olarak yeniden adlandırmak olacaktır (not: museumsdeğiştirmeyi bırakabilirsiniz ). Ancak bunu yapmak, "Desteklediğimiz Müzeler" in, şablonunuzda çıktı alınabilecek her yerde Kategori Başlığı olarak görüntüleneceği anlamına gelir. Bu kabul edilebilirse, endişelenmeyin.

Aksi takdirde, belirli menü öğesinin Başlığını almak için wp_get_nav_menu_items()( Codex ref ) gibi bir şey kullanmanız gerekir .


hey chip - bu sayfa; bfami.modernactivity.co.uk/category/museum yani kedi 'müze' ama menüler sayfasında ayarlanan navigasyon etiketi (özel başlık) olan 'MÜZELERİ DESTEKLİYORUZ' göstermek istiyorum. Bunu bir şekilde yakalamanın mümkün olduğunu mu düşünüyorsun?
v3nt

Bu yardımcı olur. Cevabımı düzenleme bölümüne bakın. Birkaç seçeneğiniz vardır: Kategoriyi yeniden adlandırın veya kullanın wp_get_nav_menu_items().
Chip Bennett

cheers chip - sadece kategori başlığını değiştirdi! Sadece menü etiketini almak için kolay bir yol olacağını düşündüm ...
v3nt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.