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');