it-swarm.com.de

Ü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 benutzerdefiniertem Feld => MenuName. 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:

<?php
    /* Division */
    wp_nav_menu(array(
        'menu' => get_post_meta( $post->ID, 'MenuName', true),
        'depth' => 2,
        'container' => false,
        'menu_class' => 'nav navbar-nav'
    ));
?>

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

Ich denke also, ich muss in meiner Seitenvorlage nach dem Menü suchen und wenn es existiert, das Menü ausdrucken. Ich habe ein paar andere Beispiele gesehen, aber alles, was ich finden konnte, war, ob die Themenregion existiert oder ein Menü existiert. Da ich 'menu' => get_post_meta( $post->ID, 'MenuName', true), verwende, um das Menü dynamisch aufzurufen, kann ich dieses dynamische Menü nicht überprüfen, bevor ich versuche, das Menü zu drucken.

Wie überprüfe ich das Menü, das von 'menu' => get_post_meta( $post->ID, 'MenuName', true), aufgerufen wird, und wenn es vorhanden ist und Menüelemente enthält, drucke ich es aus, wenn nicht, drucke ich nichts aus?

EDIT: Ich habe Folgendes versucht:

<?php
    /* Division */
    wp_nav_menu(array(
        'menu' => get_post_meta( $post->ID, 'MenuName', true),
        'depth' => 2,
        'fallback_cb' => false,
        'container' => false,
        'menu_class' => 'nav navbar-nav'
    ));
?>

Dieser neue Zusatz rendert weiterhin das nächste Menü in der Zeile der functions.php-Funktion. Wenn menu3 nicht existiert, wird das footerBlocka-Menü gedruckt. Ich denke, mein Ziel ist es, die Seiten-ID für das benutzerdefinierte Feld "MenuName" zu überprüfen, wenn es vorhanden ist, dann zu überprüfen, ob das Menü vorhanden ist und Links enthält, wenn dies zutrifft, dann das Menü zu drucken, andernfalls nichts zu tun. So 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 Pseudocode, den ich für nötig halte, aber ich weiß nicht genug über die WordPress-Hooks, um zu wissen, was es sein muss.

4
o_O

wp_nav_menu hat das Argument fallback_cb. Dies ist die Funktion, die aufgerufen wird, wenn kein Menü vorhanden ist. Dies ist standardmäßig auf wp_page_menu eingestellt. Aus diesem Grund wird eine Liste der Seiten angezeigt, wenn das Menü nicht vorhanden ist. Wenn Sie dies explizit auf false setzen, wird nichts ausgegeben, wenn das Menü nicht existiert.

BEARBEITEN-

Bei gegebenem Menünamen können Sie das Menüobjekt mit wp_get_nav_menu_object laden. Hier erfahren Sie, ob es existiert, welche ID es hat (als menu-Argument zu übergeben) und wie viele Menüelemente 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';
}
4
Milo