wp_nav_menu: แสดงเมนูเฉพาะเมื่อมีอยู่มิฉะนั้นจะไม่แสดงอะไรเลย


11

ฉันพยายามใช้ wp_nav_menu เพื่อแสดงเมนูเฉพาะถ้ามีอยู่มิฉะนั้นจะไม่แสดงอะไรเลย

ถ้าฉันลบเมนูมันจะส่งรายการของหน้า

My files.php ประกอบด้วย:

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

ฉันจะใช้ wp_nav_menu เพื่อแสดงเมนูได้ถ้ามีอยู่แล้วไม่แสดงอะไรเลย

คำตอบ:


19

ใช้has_nav_menu()และทดสอบtheme_locationแทน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' => '' 
    ) );
}
?>

คุณสามารถส่งออกเนื้อหาทางเลือกโดยการเพิ่มelseข้อ

แก้ไข

คุณต้องแทนที่$theme_locationด้วยจริง 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' => '' 
    ) );
}
?>

ขณะนี้ outputs อะไรถ้ามีเมนูไม่มันน่าเสียดายที่ไม่เหมือนกันเมื่อมีคือเมนู ความคิดอื่น ๆ ?
Ryan

คุณได้ใช้เมนูกับที่ตั้งของธีมที่ระบุหรือไม่?
Chip Bennett

ไม่ฉันจะทำอย่างไร
Ryan

1
Dashboard -> Appearance -> Menus. สร้างและบันทึกเมนูที่กำหนดเองจากนั้นปรับใช้กับตำแหน่งของชุดรูปแบบที่ระบุโดยใช้เมนูแบบเลื่อนลง
Chip Bennett

อ่าใช่ฉันทำไปแล้ว (screenshot: bit.ly/vrjNf9 ) น่าเสียดายที่ปัญหายังคงมีอยู่ - เมนูจะไม่ปรากฏขึ้น PS ไฟล์ฟังก์ชั่นของฉันมี: if (function_exists ('register_nav_menus')) {register_nav_menus (array ('main_nav' => 'เมนูนำทางหลัก'));
Ryan

6

คุณเพียงแค่สามารถระบุเท็จเป็นข้อโต้แย้งของfallback_cb wp_nav_menuจะไม่มีอะไรปรากฏขึ้น - แต่ wp_nav_menu จะคืนค่าเป็นเท็จ (ไม่มีการสะท้อนออกมา)

<?php
wp_nav_menu(array( 
    'theme_location' => $main_nav, 
    'menu_class'     => 'nav', 
    'container'      => '',
    'fallback_cb'    => false
));

ดูเหมือนว่าจะไม่: developer.wordpress.org/reference/functions/wp_nav_menu/…
Alireza

0

คุณสามารถลงทะเบียนเมนูก่อนได้โดยไม่ต้องระบุตำแหน่ง
ในfunctions.php:

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

และเมื่อคุณโทรเข้าเมนูheader.phpตรวจสอบด้วยhas_nav_menu():

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

หากคุณลงทะเบียนเมนูโดยไม่มีตำแหน่งของชุดรูปแบบคุณจะไม่สามารถขอได้ในภายหลังด้วยข้อ จำกัด ตำแหน่งของชุดรูปแบบ
fuxia

0

อ่านนี่:

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

set 'fallback_cb' => false และจะไม่มีการแสดงผลนี่เป็นวิธีมาตรฐานที่แนะนำโดย wp guys


นี่เป็นคำตอบเดียวกับ chrisguitarguy ...
brasofilo

ฉันรู้ว่าฉันแค่อยากจะชี้ให้คุณเห็นถึงบทความหลักเกี่ยวกับ wordpress codex
Hooman Askari

ดูเหมือนว่ามันไม่เป็นความจริง เอกสารบอกว่า: หากไม่ได้รับพารามิเตอร์ theme_location ฟังก์ชันจะแสดงdeveloper.wordpress.org/reference/functions/wp_nav_menu/…เมนูที่ตรงกับ ID, กระสุนหรือชื่อที่กำหนดโดยพารามิเตอร์เมนู มิฉะนั้นเมนูแรกที่ไม่ว่างเปล่า; มิฉะนั้น (หรือหากเมนูที่กำหนดโดยเมนูว่างเปล่า) เอาต์พุตของฟังก์ชันที่กำหนดโดยพารามิเตอร์ fallback_cb (wp_page_menu () โดยค่าเริ่มต้น); ไม่มีอะไรอย่างอื่น
Alireza
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.