Überprüfen Sie, ob ein Menü leer ist.

Ich habe Menüs, die einem benutzerdefinierten Feld auf einer Seite entsprechen. Dh ich habe menu1, menu2 und menu3 auf drei Seiten unter benutzerdefiniertes Feld => Menüname. Unter functions.php habe ich:

/* Add Menu Locations */ add_action( 'init', 'register_my_menus' ); function register_my_menus() { register_nav_menus( array( 'one-menu' => __('menu1'), 'two-menu' => __('menu2'), 'three-menu' => __('menu3'), 'footerBlocka' => __('Footer Block 1'), 'footerBlockb' => __('Footer Block 2'), 'footerBlockc' => __('Footer Block 3'), 'footerBlockd' => __('Footer Block 5') ) ); } 

Dann habe ich in meiner Seitenvorlage:

  get_post_meta( $post->ID, 'MenuName', true), 'depth' => 2, 'container' => false, 'menu_class' => 'nav navbar-nav' )); ?> 

Dies funktioniert gut, solange a) das Menü vorhanden ist und b) das Menü tatsächlich Menüpunkte enthält. Wenn das Menü vorhanden ist, aber keine Menüelemente vorhanden sind, wird auf seltsame Weise eine Liste aller Menüelemente aus allen Menüs auf der Site angezeigt. Wenn das Menü nicht existiert, wird nur das nächste in der functions.php aufgelistete Menü angezeigt.

Also denke ich, dass ich in meiner Seitenvorlage nach dem Menü suchen muss und wenn es existiert, drucke das Menü aus. Ich habe ein paar andere Beispiele gesehen, aber alles, was ich finden konnte, war, ob der Themenbereich existiert oder ein Menü existiert. Da ich 'menu' => get_post_meta( $post->ID, 'MenuName', true), um das Menü dynamisch aufzurufen, weiß ich nicht, wie ich dieses dynamische Menü überprüfen soll, bevor ich versuche, das Menü auszudrucken.

Also, wie überprüfe ich das Menü, das von 'menu' => get_post_meta( $post->ID, 'MenuName', true), und wenn es existiert und Menüpunkte dann drucken, wenn nicht, nichts drucken?

EDIT: Ich habe folgendes versucht:

  get_post_meta( $post->ID, 'MenuName', true), 'depth' => 2, 'fallback_cb' => false, 'container' => false, 'menu_class' => 'nav navbar-nav' )); ?> 

Dieser neue Zusatz rendert das nächste Menü immer noch in der Zeile der function functions.php. Wenn menu3 nicht vorhanden ist, wird das footerBlocka-Menü gedruckt. Ich denke, dass mein Ziel darin besteht, die Seiten-ID für das benutzerdefinierte Feld “MenuName” zu überprüfen, wenn es vorhanden ist, dann zu prüfen, ob das Menü existiert und Links hat, wenn es wahr ist, dann Menü drucken, sonst nichts tun. Etwas wie:

 $menu = get_post_meta($post->ID, 'MenuName'); if($menu){ if([wp_nav_menu == $menu AND has links]){ wp_nav_menu(array(...)); } } 

Das ist der Pseudo-Code, den ich denke, aber ich weiß nicht genug über die WordPress-Hooks, um zu wissen, was es sein muss.

Solutions Collecting From Web of "Überprüfen Sie, ob ein Menü leer ist."

wp_nav_menu hat das Argument fallback_cb , welches die aufgerufene function ist, wenn ein Menü nicht existiert. Dies ist standardmäßig auf wp_page_menu , weshalb Sie eine Liste von Seiten sehen, wenn das Menü nicht existiert. Wenn Sie dies explizit auf false , wird nichts ausgegeben, wenn das Menü nicht existiert.

BEARBEITEN-

Bei einem wp_get_nav_menu_object können Sie das wp_get_nav_menu_object mit wp_get_nav_menu_object . Dies wird Ihnen sagen, ob es existiert, was seine ID ist (um als menu ) und wie viele Menüpunkte es hat.

 $menu_name = get_post_meta( $post->ID, 'MenuName', true ); $menu = wp_get_nav_menu_object( $menu_name ); if( is_object( $menu ) ){ echo 'This menu exists!'; echo 'This menu has ' . $menu->count . ' menu items.'; echo 'This menu ID is ' . $menu->term_id . '.'; } else { echo 'A menu with that name doesn\'t exist'; }