Abrufen einer Liste von Menüelementen in einem Array

16

Ich arbeite derzeit an einem benutzerdefinierten Thema. In diesem Thema habe ich ein Menü, mit dem ich mich registriert habe register-nav-menu, und dann zeige ich das Menü mit der wp_nav_menuFunktion auf meiner Webseite an .

Ich möchte jedoch nur die Liste der Menüelemente abrufen (die tatsächlichen Namen der Menüelemente, die im Bereich wp-admin zum Erstellen des Menüs verwendet wurden, und ohne HTML-Code) und diese Liste der Elemente in einem Array speichern (dh nicht anzeigen).

Ein Pseudocode würde also so aussehen

$menu_items = get_list_of_items($name_of_menu); // $name_of_menu is the result of register-nav-menu, and get_list_of_items is the psuedo function
foreach ($menu_items as $item) {
    // do something with the item
}

Gibt es eine Möglichkeit, dies zu tun? Vielen Dank.

Greeso
quelle

Antworten:

46

Wie @vancoder erwähnt, wp_get_nav_menu_items()ist der Weg zu gehen, jedoch denke ich, dass eine detailliertere Antwort für die Menschen in Zukunft hilfreicher sein würde.

Diese Funktion gibt ein Array von WP_Post ObjectObjekten zurück (Sie greifen also zB mit einem Pfeil auf die Werte zu $item->title).

Für eine grundlegende Einrichtung können Sie Folgendes verwenden:

$menuLocations = get_nav_menu_locations(); // Get our nav locations (set in our theme, usually functions.php)
                                           // This returns an array of menu locations ([LOCATION_NAME] = MENU_ID);

$menuID = $menuLocations['primary']; // Get the *primary* menu ID

$primaryNav = wp_get_nav_menu_items($menuID); // Get the array of wp objects, the nav items for our queried location.

Dann können Sie diese $primaryNavVariable einfach durchlaufen , zum Beispiel:

foreach ( $primaryNav as $navItem ) {

    echo '<li><a href="'.$navItem->url.'" title="'.$navItem->title.'">'.$navItem->title.'</a></li>';

}
Brad Adams
quelle
1
für mich ist dies "falsch"
John Smith
4
Kopieren Sie @JohnSmith? Sie müssen die ID Ihres Menüs verwenden.
Brad Adams
Ich fand das viel einfacher als die Walker-Klasse. Schön!
Lee
1

Holen Sie sich eine einfache Auswahl an Menüs.

Add To Functions.php

    function wp_get_menu_array($current_menu) {

    $array_menu = wp_get_nav_menu_items($current_menu);
    $menu = array();
    foreach ($array_menu as $m) {
        if (empty($m->menu_item_parent)) {
            $menu[$m->ID] = array();
            $menu[$m->ID]['ID'] = $m->ID;
            $menu[$m->ID]['title'] = $m->title;
            $menu[$m->ID]['url'] = $m->url;
            $menu[$m->ID]['children'] = array();
        }
    }
    $submenu = array();
    foreach ($array_menu as $m) {
        if ($m->menu_item_parent) {
            $submenu[$m->ID] = array();
            $submenu[$m->ID]['ID'] = $m->ID;
            $submenu[$m->ID]['title'] = $m->title;
            $submenu[$m->ID]['url'] = $m->url;
            $menu[$m->menu_item_parent]['children'][$m->ID] = $submenu[$m->ID];
        }
    }
    return $menu;
}

Gehen Sie zu Ihrer Kopf- und Anruffunktion

<?php
 $a = wp_get_menu_array('top-menu-header');                         
 print_r($a); exit;                       

?>
Mahesh Kathiriya
quelle
Dies ist eine anständige Antwort, die jedoch nur eine Ebene tiefer geht.
Hybrid Web Dev