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!

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 .


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;

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

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.