Bagaimana cara mendapatkan judul menu saat ini sebagai variabel?

10

Apakah mungkin untuk mendapatkan item menu saat ini sebagai variabel php?

Saya mendaftarkan kategori museum melalui item menu 'museum yang kami dukung' jadi saya ingin mendapat sedikit 'museum yang kami dukung' dan tampilkan di suatu tempat?

Bantuan apa pun dihargai!

v3nt
sumber

Jawaban:

15

Ini dimungkinkan dengan memfilter wp_nav_menu_objects, yang merupakan tempat termudah untuk memeriksa item mana yang merupakan item menu saat ini, karena WordPress telah menambahkan kelas untuk Anda .

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

Anda sekarang dapat menggunakan variabel global baru ini alih-alih judul normal. Contoh sederhana:

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

Tentu saja, ini hanya berfungsi jika Anda menampilkan menu sebelum menampilkan judul. Jika Anda membutuhkannya sebelumnya (mungkin dalam <title>elemen?), Anda harus terlebih dahulu menyajikan menu dan kemudian menampilkannya nanti .

Jan Fabry
sumber
halo Jan - hanya ingin tahu apakah ada cara untuk membuat array dari $ menu_item-> anak-anak item saat ini? Mencoba beberapa hal tetapi tidak terlalu jauh ..!
v3nt
dikelola ini dengan bantuan filter Anda - jawab di bawah. Bersulang!
v3nt
Jan Fabry / Saya mencoba menggunakan wpse16243_wp_nav_menu_objectsuntuk mengambil ID menu saat ini. Tapi itu tidak konsisten. Beralih antara beranda dan item menu tidak selalu memberi saya item menu yang benar - ini semacam "kelambatan". Adakah saran tentang bagaimana saya dapat mengambil ID menu saat ini?
Steven
Apakah ada alasan mengapa Anda mendahului nama fungsi wpse16243? Saya melihat jenis nama aneh ini cukup umum dan bertanya-tanya tentang apa semua ini. Penafian: Wordpress noob.
Stephen Watkins
2
@ Steve: Hanya awalan yang unik: WordPress Stack Exchange question number 16243. Jika orang langsung menyalin kode ini, itu tidak akan bertentangan dengan plugin lain yang mungkin berbagi nama fungsi yang sama.
Jan Fabry
4

Anda bisa menggunakannya wp_get_nav_menu_items(). Berikut ini contohnya 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;
}

Kemudian memanggil functiondengan nama lokasi dari menu nav Anda ingin gunakan:

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

echo $menu_name;
Giraldi
sumber
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;
}
v3nt
sumber
0

Saya tidak yakin saya benar-benar mengikuti.

"Museum yang Kami Dukung" dihasilkan oleh Judul Posting, Judul Halaman, Judul Kategori, dll. (Atau, jika Anda menggunakan Menu Navigasi Kustom, itu bisa menjadi Judul kustom).

Apa yang Anda coba lakukan dengan teks ini? Di mana Anda mencoba menampilkannya? Saya berasumsi Anda mencoba untuk menampilkannya di Halaman Indeks Kategori (karena Anda mengindikasikannya current-menu-item)? Jika demikian, cukup panggil <?php single_cat_title(); ?>untuk menampilkan Judul Kategori.

Jika Anda memerlukan informasi kategori tambahan, Anda dapat menggunakan sesuatu seperti:

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

Yang menyediakan variabel-variabel berikut:

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

Jika Anda berada di tempat lain selain Halaman Indeks Kategori, Anda harus memberikan $ catid ke fungsi-fungsi ini.

EDIT:

Karena Anda menyatakan bahwa "Museum Kami Mendukung" adalah Judul Menu kustom, pendekatan termudah adalah mengubah nama Kategori dari "Museum" menjadi "Museum Kami Mendukung" (catatan: Anda dapat membiarkan siput museums,, tidak berubah). Namun, melakukan hal itu berarti bahwa "Museum Kami Mendukung" akan ditampilkan sebagai Judul Kategori di mana pun itu akan ditampilkan dalam template Anda. Jika itu bisa diterima, maka jangan khawatir.

Jika tidak, Anda harus menggunakan sesuatu seperti wp_get_nav_menu_items()( Ref Codex ) untuk meraih Judul untuk item menu tertentu.

Chip Bennett
sumber
hei chip - ini halaman ini; bfami.modernactivity.co.uk/category/museum jadi pada dasarnya kucing adalah 'museum' tetapi saya ingin menunjukkan 'MUSEUMS WE SUPPORT' yang merupakan label navigasi (judul khusus) yang diatur di halaman menu. Pikirkan itu mungkin untuk mengambil itu entah bagaimana?
v3nt
Itu membantu. Lihat jawaban saya edit. Anda memiliki beberapa opsi: ganti nama Kategori, atau gunakan wp_get_nav_menu_items().
Chip Bennett
Cheers Chip - baru saja mengubah judul kategori pada akhirnya! Hanya berpikir akan ada cara mudah untuk mengambil label menu ...
v3nt