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?

Ryan
sumber

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' => '' 
    ) );
}
?>
Chip Bennett
sumber
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
6

Anda bisa menentukan false sebagai fallback_cbargumen dari wp_nav_menu. Tidak ada yang akan ditampilkan - sebaliknya, wp_nav_menu akan mengembalikan false (tidak ada yang menggema).

<?php
wp_nav_menu(array( 
    'theme_location' => $main_nav, 
    'menu_class'     => 'nav', 
    'container'      => '',
    'fallback_cb'    => false
));
chrisguitarguy
sumber
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' ) ); 
}
Alex Chen
sumber
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.

Hooman Askari
sumber
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