/* ================================ 📱 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($location, 'top') !== false || strpos($location, 'primary') !== false) { $topmenu_location = $location; break; } } } // 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-topmenu', // ID des Menüs (ohne Numerierung) '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 ) ); } 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($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; } } // 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('wp/v2', '/menus/(?Pd+)', array( 'methods' => 'GET', 'callback' => 'miss_mole_get_menu_rest_items', '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 = $request['id']; $menu_items = wp_get_nav_menu_items($menu_id); if (!$menu_items) { return new WP_Error('miss_mole_menu_not_found', 'Das angeforderte Menü wurde nicht gefunden', array('status' => 404)); } return array( 'id' => $menu_id, 'name' => wp_get_nav_menu_object($menu_id)->name, 'items' => $menu_items ); }