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.