Hauptmenü

Werkzeuge

Kategorien

Archiv

Rootline / Breadcrumb eines WordPress Menüs

Erstellt in Allgemein am 3. August 2021 vom Daschmi

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

Javascript forEach Schleife abbrechen

Erstellt in Javascript am 1. August 2021 vom Daschmi

Ein Callback der an eine forEach Funktion übergeben wurde kann die Schleife nicht mit return oder break beenden. Es geht aber über das Nutzen einer Exception.

try {
    			
    BigIPBlock.forEach(function(ip, long, index) {
    
        console.log(index, ip);
        
        if (index > 255) throw new Error();
    
    });

} catch (E) {
    
    console.log('To much IPs in block.');
    
}