/* ================================ 🔄 Mobile vertikale Navigation ================================ */ function miss_mole_enqueue_mobile_nav_scripts() { // Das CSS für alle Geräte einbinden (für Media Queries) wp_enqueue_style( 'miss-mole-mobile-nav', get_stylesheet_directory_uri() . '/mobile-nav.css', array('kadence-parent'), wp_get_theme()->get('Version') ); // JavaScript für alle Geräte einbinden (enthält eigene Prüfung für Mobile) wp_enqueue_script( 'miss-mole-mobile-nav-js', get_stylesheet_directory_uri() . '/mobile-nav.js', array('jquery'), time(), // Verwende timestamp für einfaches Debugging true ); // Die korrekten Menü-Details über das lokalisierte Skript bereitstellen $menu_locations = get_nav_menu_locations(); $topmenu_location = ''; $topmenu_id = 398; // Direkt die ID des Topmenüs setzen // Menü ID und Speicherort basierend auf vorhandenen Menüs finden if (!empty($menu_locations)) { foreach ($menu_locations as $location => $menu_id) { // Wir suchen nach dem Standort, der "top" im Namen enthält if (strpos(strtolower($location), 'top') !== false || strpos($location, 'primary') !== false) { $topmenu_location = $location; break; } } } // Menü-Objekt direkt abrufen, um den exakten Namen zu bekommen $menu_name = ''; if ($topmenu_id) { $menu_obj = wp_get_nav_menu_object($topmenu_id); if ($menu_obj) { $menu_name = $menu_obj->name; } } // CSS-ID des Menüs berechnen (WordPress verwendet Slug-Version des Namens) $menu_css_id = 'menu-' . sanitize_title($menu_name); // Lokalisierung für JS hinzufügen, um Menüpositionen zu identifizieren wp_localize_script( 'miss-mole-mobile-nav-js', 'missNavData', array( 'topMenuLocation' => $topmenu_location, // Dynamischer Name der Menüposition 'mainMenuID' => $menu_css_id, // ID des Menüs (ohne Numerierung) 'mainMenuName' => $menu_name, // Name des Menüs (mit Umlauten) 'specificMenuID' => $topmenu_id, // Spezifische ID des Topmenüs (398) 'ajaxurl' => admin_url('admin-ajax.php'), // AJAX URL für API-Aufrufe 'site_url' => site_url(), // Site URL für relative Links 'menuLocations' => array_keys($menu_locations), // Alle verfügbaren Menü-Positionen 'debugInfo' => array( // Debug-Informationen 'menuName' => $menu_name, 'menuCssId' => $menu_css_id, 'menuId' => $topmenu_id ) ) ); } add_action('wp_enqueue_scripts', 'miss_mole_enqueue_mobile_nav_scripts'); /** * AJAX-Endpunkt, um das Topmenü über die WordPress-API zu erhalten */ function miss_mole_get_menu_items() { // Direkt das Topmenü mit der ID 398 holen $menu_id = isset($_POST['menu_id']) ? intval($_POST['menu_id']) : 398; $menu_items = wp_get_nav_menu_items($menu_id); // Wenn das spezifische Menü nicht gefunden wurde, versuchen wir es mit anderen Methoden if (!$menu_items) { // Versuche zuerst, ein Menü mit "top" im Namen zu finden $locations = get_nav_menu_locations(); $menu_found = false; foreach ($locations as $location => $loc_menu_id) { if (strpos(strtolower($location), 'top') !== false || strpos($location, 'primary') !== false) { $menu_items = wp_get_nav_menu_items($loc_menu_id); $menu_found = true; break; } } // Wenn kein Top-Menü gefunden wurde, nehmen wir das erste verfügbare Menü if (!$menu_found && !empty($locations)) { $first_location = array_key_first($locations); $first_menu_id = $locations[$first_location]; $menu_items = wp_get_nav_menu_items($first_menu_id); $menu_found = true; } // Wenn immer noch nicht gefunden, versuche alle Menüs zu durchsuchen if (!$menu_found) { $menus = wp_get_nav_menus(); foreach ($menus as $menu) { if (strpos(strtolower($menu->name), 'top') !== false || strpos(strtolower($menu->name), 'topm') !== false || $menu->term_id == 398) { $menu_items = wp_get_nav_menu_items($menu->term_id); $menu_found = true; break; } } } } // Menüstruktur formatieren $formatted_menu = array(); if ($menu_items) { foreach ($menu_items as $item) { if ($item->menu_item_parent == 0) { // Hauptmenüpunkt $menu_item = array( 'title' => $item->title, 'url' => $item->url, 'children' => array() ); // Untermenüs suchen foreach ($menu_items as $child) { if ($child->menu_item_parent == $item->ID) { $menu_item['children'][] = array( 'title' => $child->title, 'url' => $child->url ); } } $formatted_menu[] = $menu_item; } } wp_send_json_success($formatted_menu); } else { // Fallback-Menü für Miss Mole $fallback_menu = array( array( 'title' => 'Startseite', 'url' => home_url(), 'children' => array() ), array( 'title' => 'Shop', 'url' => function_exists('wc_get_page_id') ? get_permalink(wc_get_page_id('shop')) : home_url('/shop/'), 'children' => array() ), array( 'title' => 'Sale', 'url' => home_url('/sale/'), 'children' => array() ), array( 'title' => 'Über uns', 'url' => home_url('/ueber-uns/'), 'children' => array() ), array( 'title' => 'Kontakt', 'url' => home_url('/kontakt/'), 'children' => array() ) ); wp_send_json_success($fallback_menu); } die(); } add_action('wp_ajax_miss_mole_get_menu_items', 'miss_mole_get_menu_items'); add_action('wp_ajax_nopriv_miss_mole_get_menu_items', 'miss_mole_get_menu_items'); /** * Registriert einen Custom REST API Endpoint für Miss Mole Menüs */ function miss_mole_register_menu_rest_routes() { register_rest_route('miss-mole/v1', '/menus/(?Pd+)', array( 'methods' => 'GET', 'callback' => 'miss_mole_get_menu_rest_items', 'permission_callback' => '__return_true', )); // Zusätzlicher Endpoint ohne ID-Parameter (für den Fall dass die ID fehlt) register_rest_route('miss-mole/v1', '/topmenu', array( 'methods' => 'GET', 'callback' => function() { return miss_mole_get_menu_rest_items(array('id' => 398)); }, 'permission_callback' => '__return_true', )); } add_action('rest_api_init', 'miss_mole_register_menu_rest_routes'); /** * Callback für den REST API Endpoint */ function miss_mole_get_menu_rest_items($request) { $menu_id = isset($request['id']) ? $request['id'] : 398; $menu_items = wp_get_nav_menu_items($menu_id); if (!$menu_items) { // Versuche alle Menüs zu durchsuchen $menus = wp_get_nav_menus(); foreach ($menus as $menu) { if (strpos(strtolower($menu->name), 'top') !== false || strpos(strtolower($menu->name), 'topm') !== false || $menu->term_id == 398) { $menu_items = wp_get_nav_menu_items($menu->term_id); if ($menu_items) { $menu_id = $menu->term_id; break; } } } if (!$menu_items) { // Fallback, wenn immer noch kein Menü gefunden wurde return array( 'id' => 398, 'name' => 'Fallback Menü', 'items' => array( array( 'title' => 'Startseite', 'url' => home_url(), 'menu_item_parent' => 0 ), array( 'title' => 'Shop', 'url' => home_url('/shop/'), 'menu_item_parent' => 0 ), array( 'title' => 'Sale', 'url' => home_url('/sale/'), 'menu_item_parent' => 0 ), array( 'title' => 'Über uns', 'url' => home_url('/ueber-uns/'), 'menu_item_parent' => 0 ), array( 'title' => 'Kontakt', 'url' => home_url('/kontakt/'), 'menu_item_parent' => 0 ) ) ); } } $menu_object = wp_get_nav_menu_object($menu_id); $menu_name = $menu_object ? $menu_object->name : 'Topmenü'; return array( 'id' => $menu_id, 'name' => $menu_name, 'items' => $menu_items ); }