wp_nav_menu: tampilkan menu hanya jika ada, jika tidak tampilkan apa-apa


11

Saya mencoba menggunakan wp_nav_menu untuk hanya menampilkan menu jika ada, jika tidak, tidak menampilkan apa pun.

Jika saya menghapus menu, itu akan menampilkan daftar halaman.

File functions.php saya berisi:

if (function_exists('register_nav_menus')) {
register_nav_menus (
array('main_nav' => 'Main Navigation Menu'));}

Bagaimana saya bisa menggunakan wp_nav_menu untuk hanya menampilkan menu jika ada, jika tidak menunjukkan apa-apa?

Jawaban:


19

Gunakan has_nav_menu(), dan uji untuk theme_location, daripada menu_id:

<?php
if ( has_nav_menu( $theme_location ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => $theme_location, 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

Anda dapat menampilkan konten alternatif, dengan menambahkan elseklausa.

EDIT

Anda harus mengganti $theme_locationdengan yang sebenarnya theme_location :

<?php
if ( has_nav_menu( 'main_nav' ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => 'main_nav', 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

Sementara ini output apa-apa jika tidak ada menu, sayangnya melakukan hal yang sama ketika ada adalah menu. Ada ide lain?
Ryan

Sudahkah Anda menerapkan menu ke Lokasi Tema yang ditentukan?
Chip Bennett

Tidak, bagaimana saya melakukannya?
Ryan

1
Dashboard -> Appearance -> Menus. Buat dan simpan menu khusus, lalu terapkan ke Lokasi Tema yang ditentukan, menggunakan menu tarik turun.
Chip Bennett

Ah ya, saya telah melakukan itu (tangkapan layar: bit.ly/vrjNf9 ). Sayangnya, masalahnya masih tetap ada - menu tidak akan muncul. File PS fungsi saya memiliki ini: if (function_exists ('register_nav_menus')) {register_nav_menus (array ('main_nav' => 'Menu Navigasi Utama'));}
Ryan


0

Anda bisa mendaftarkan menu terlebih dahulu tanpa menentukan lokasi.
Dalam functions.php:

add_action( 'init', 'register_my_menus' );
function register_my_menus() {  
    register_nav_menus(
        array(
            'header' => __( 'Header Menu' )
        )
    );
}

Dan ketika Anda memanggil menu header.php, periksa dengan has_nav_menu():

if ( has_nav_menu( 'header' ) ) {
    wp_nav_menu( array( 'theme_location' => 'header' ) ); 
}

Jika Anda mendaftarkan menu tanpa lokasi tema, Anda tidak dapat memintanya nanti dengan pembatasan lokasi tema.
fuxia

0

Baca ini:

http://codex.wordpress.org/Function_Reference/wp_nav_menu

set 'fallback_cb' => false dan tidak ada yang ditampilkan, ini adalah metode standar yang disarankan oleh wp guys.


Ini sama dengan jawaban chrisguitarguy ...
brasofilo

Saya tahu, saya hanya ingin menunjukkan Anda pada artikel utama tentang wordpress codex.
Hooman Askari

Tampaknya itu tidak benar. Dokumen mengatakan: Jika tidak diberi parameter theme_location, fungsi ini menampilkan developer.wordpress.org/reference/functions/wp_nav_menu/... menu yang cocok dengan ID, slug, atau nama yang diberikan oleh parameter menu; jika tidak, menu non-kosong pertama; jika tidak (atau jika menu yang diberikan oleh menu kosong), output dari fungsi yang diberikan oleh parameter fallback_cb (wp_page_menu (), secara default); jika tidak ada apa-apa.
Alireza
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.