Mit folgender Funktion kann man die Rootline / Breadcrumb eines WordPress Menüs bilden. Die Einträge im Menü sollten dabei nur einmal vorhanden sein, sonst ist der Pfad nicht eindeutig.
abstract class Nav {
public static function getRootline(string $menu_location): array {
$arMenuLocations = \get_nav_menu_locations();
$menuID = $arMenuLocations[$menu_location];
$arNav = \wp_get_nav_menu_items($menuID);
$arRootline = [];
foreach ($arNav as $nav_item) {
if ($nav_item->type === 'post_type' && get_the_ID() === intval($nav_item->object_id)) {
$arRootline[] = $nav_item;
while (intval($nav_item->menu_item_parent) !== 0) {
foreach ($arNav as $sub_nav_item) {
if (intval($sub_nav_item->ID) === intval($nav_item->menu_item_parent)) {
$arRootline[] = $sub_nav_item;
$nav_item = $sub_nav_item;
break;
}
}
}
}
}
array_reverse($arRootline);
return $arRootline;
}
}
Beispielhafte Anwendung der Funktion
$arRootline = Nav::getRootline('main_menu');