wp_nav_menu: chỉ hiển thị menu nếu có, không hiển thị gì cả


11

Tôi đang cố gắng sử dụng wp_nav_menu để chỉ hiển thị một menu nếu có, nếu không, không hiển thị gì cả.

Nếu tôi xóa menu, nó sẽ xuất ra một danh sách các trang.

Tệp tin.php của tôi chứa:

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

Làm cách nào tôi có thể sử dụng wp_nav_menu để chỉ hiển thị một menu nếu có tồn tại, nếu không thì không hiển thị gì?

Câu trả lời:


19

Sử dụng has_nav_menu()và kiểm tra theme_location, thay vì 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' => '' 
    ) );
}
?>

Bạn có thể xuất nội dung thay thế, bằng cách thêm một elsemệnh đề.

BIÊN TẬP

Bạn cần thay thế $theme_locationbằng thực tế của bạn 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' => '' 
    ) );
}
?>

Trong khi điều này kết quả đầu ra không có gì nếu không có trình đơn, nó không may cũng làm như vậy khi có một menu. Còn ý tưởng nào khác không?
Ryan

Bạn đã áp dụng một menu cho Vị trí chủ đề được chỉ định?
Chip Bennett

Không, làm thế nào để tôi làm điều đó?
Ryan

1
Dashboard -> Appearance -> Menus. Tạo và lưu menu tùy chỉnh, sau đó áp dụng nó cho Vị trí chủ đề được chỉ định, sử dụng menu thả xuống.
Chip Bennett

À đúng rồi, tôi đã làm điều đó (ảnh chụp màn hình: bit.ly/vrjNf9 ). Thật không may, vấn đề vẫn còn tồn tại - menu sẽ không xuất hiện. PS Tệp chức năng của tôi có cái này: if (function_exists ('register_nav_menus')) {register_nav_menus (mảng ('main_nav' => 'Menu điều hướng chính'));}
Ryan

6

Bạn chỉ có thể chỉ định false là fallback_cbđối số của wp_nav_menu. Không có gì sẽ hiển thị - thay vào đó, wp_nav_menu sẽ trả về false (không lặp lại gì cả).

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


0

Bạn chỉ có thể đăng ký menu trước mà không chỉ định vị trí.
Trong functions.php:

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

Và khi bạn gọi menu trong header.php, hãy kiểm tra với has_nav_menu():

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

Nếu bạn đăng ký một menu mà không có vị trí chủ đề, bạn không thể yêu cầu nó sau này với một hạn chế vị trí chủ đề.
fuxia

0

Đọc này:

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

đặt 'fallback_cb' => false và không cái nào được hiển thị, đây là phương thức chuẩn được đề xuất bởi các chàng trai wp.


Điều này giống như câu trả lời của chrisguitarguy ...
brasofilo

Tôi biết, tôi chỉ muốn chỉ cho bạn bài viết chính về codex wordpress.
Hooman Askari

Có vẻ như đó không phải là sự thật. Các tài liệu cho biết: Nếu không đưa ra một thông số theme_location, hiển thị chức năng developer.wordpress.org/reference/functions/wp_nav_menu/... menu phù hợp với ID, sên, hoặc tên được đặt bởi tham số đơn; mặt khác, menu không trống đầu tiên; mặt khác (hoặc nếu menu được cung cấp bởi menu trống), đầu ra của hàm được cung cấp bởi tham số fallback_cb (wp_page_menu (), theo mặc định); nếu không thì không có gì.
Alireza
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.