From 21d9e0f56cd74b36bf9530f242a3374d9822842f Mon Sep 17 00:00:00 2001 From: M_Viper Date: Sun, 29 Mar 2026 20:27:48 +0000 Subject: [PATCH] Upload via Git Manager GUI - functions.php --- Minecraft-Modern-Theme/functions.php | 1209 +++++++++++++++++++++++++- 1 file changed, 1181 insertions(+), 28 deletions(-) diff --git a/Minecraft-Modern-Theme/functions.php b/Minecraft-Modern-Theme/functions.php index 8c04ee8..f74dfbb 100644 --- a/Minecraft-Modern-Theme/functions.php +++ b/Minecraft-Modern-Theme/functions.php @@ -37,7 +37,7 @@ add_action( 'after_setup_theme', 'minecraft_modern_setup' ); // === Styles & Scripts laden === function minecraft_modern_scripts() { // Haupt-Stylesheet - wp_enqueue_style( 'minecraft-modern-style', get_stylesheet_uri() ); + wp_enqueue_style( 'minecraft-modern-style', get_stylesheet_uri(), array(), filemtime( get_stylesheet_directory() . '/style.css' ) ); // Swiper.js CSS wp_enqueue_style( 'swiper-css', 'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css' ); @@ -47,7 +47,7 @@ function minecraft_modern_scripts() { 'minecraft-modern-header-script', get_template_directory_uri() . '/js/header-scroll.js', array(), - '1.1', + filemtime( get_template_directory() . '/js/header-scroll.js' ), true ); @@ -136,6 +136,17 @@ add_action( 'wp_enqueue_scripts', 'minecraft_modern_scroll_to_top_css', 25 ); // === Customizer-Datei laden === require get_template_directory() . '/inc/customizer.php'; + + + + +// ========================================================================= +// INTELLIGENTER SUPPORT-ASSISTENT +// ========================================================================= +// Ausgelagert in /inc/assistant-widget.php +require get_template_directory() . '/inc/assistant-widget.php'; + + // === Theme-Updater-Datei laden === require get_template_directory() . '/inc/theme-updater.php'; @@ -527,7 +538,7 @@ function handle_theme_settings_export() { } $data['widgets'] = $widget_data; - // 4. Team-Mitglieder + // 4. Team-Mitglieder (mit UUID, Banner, Thumbnail) $team_data = array(); $team_query = new WP_Query( array( 'post_type' => 'team_member', @@ -538,11 +549,15 @@ function handle_theme_settings_export() { if ( $team_query->have_posts() ) { while ( $team_query->have_posts() ) { $team_query->the_post(); + $post_id = get_the_ID(); $team_data[] = array( - 'title' => get_the_title(), - 'content' => get_the_content(), - 'rank' => get_post_meta( get_the_ID(), '_team_member_rank', true ), - 'menu_order' => get_post_field( 'menu_order', get_the_ID() ), + 'title' => get_the_title(), + 'content' => get_the_content(), + 'rank' => get_post_meta( $post_id, '_team_member_rank', true ), + 'uuid' => get_post_meta( $post_id, '_team_member_uuid', true ), + 'banner_id' => get_post_meta( $post_id, '_team_member_banner', true ), + 'thumbnail_id' => get_post_thumbnail_id( $post_id ), + 'menu_order' => get_post_field( 'menu_order', $post_id ), ); } wp_reset_postdata(); @@ -575,7 +590,52 @@ function handle_theme_settings_export() { // 6. Custom CSS (Customizer → Zusätzliches CSS) $data['custom_css'] = wp_get_custom_css(); - // 7. Menü-Positionen (welches Menü ist welchem Theme-Location zugewiesen) + // 7. Homepage-Seite (falls eingestellt) + $homepage_id = get_option( 'page_on_front' ); + if ( $homepage_id ) { + $homepage = get_post( $homepage_id ); + if ( $homepage ) { + $data['homepage'] = array( + 'title' => $homepage->post_title, + 'content' => $homepage->post_content, + 'excerpt' => $homepage->post_excerpt, + 'featured_img' => get_post_thumbnail_id( $homepage_id ), + ); + } + } + + // 8. Navigation Menüs mit Items + $nav_menus = array(); + $all_nav_menus = wp_get_nav_menus(); + foreach ( $all_nav_menus as $menu ) { + $nav_menus[ $menu->slug ] = array( + 'name' => $menu->name, + 'description' => $menu->description, + 'items' => array(), + ); + $menu_items = wp_get_nav_menu_items( $menu->term_id ); + if ( $menu_items ) { + foreach ( $menu_items as $item ) { + $nav_menus[ $menu->slug ]['items'][] = array( + 'title' => $item->title, + 'url' => $item->url, + 'description' => $item->description, + 'type' => $item->type, + 'type_label' => $item->type_label, + 'object' => $item->object, + 'object_id' => $item->object_id, + 'parent' => $item->menu_item_parent, + 'menu_order' => $item->menu_order, + 'target' => get_post_meta( $item->ID, '_menu_item_target', true ), + 'classes' => implode( ' ', (array) $item->classes ), + 'xfn' => get_post_meta( $item->ID, '_menu_item_xfn', true ), + ); + } + } + } + $data['nav_menus'] = $nav_menus; + + // 9. Menü-Positionen (welches Menü ist welchem Theme-Location zugewiesen) $data['nav_menu_locations'] = get_theme_mod( 'nav_menu_locations', array() ); $json = json_encode( $data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE ); @@ -686,8 +746,23 @@ function handle_theme_settings_import() { 'post_status' => 'publish', 'menu_order' => intval( isset( $member['menu_order'] ) ? $member['menu_order'] : 0 ), ) ); - if ( $id && ! is_wp_error( $id ) && ! empty( $member['rank'] ) ) { - update_post_meta( $id, '_team_member_rank', sanitize_text_field( $member['rank'] ) ); + if ( $id && ! is_wp_error( $id ) ) { + // Rank + if ( ! empty( $member['rank'] ) ) { + update_post_meta( $id, '_team_member_rank', sanitize_text_field( $member['rank'] ) ); + } + // UUID + if ( ! empty( $member['uuid'] ) ) { + update_post_meta( $id, '_team_member_uuid', sanitize_text_field( $member['uuid'] ) ); + } + // Thumbnail + if ( ! empty( $member['thumbnail_id'] ) ) { + set_post_thumbnail( $id, intval( $member['thumbnail_id'] ) ); + } + // Banner + if ( ! empty( $member['banner_id'] ) ) { + update_post_meta( $id, '_team_member_banner', intval( $member['banner_id'] ) ); + } } } $imported[] = count( $team_data ) . ' Team-Mitglieder'; @@ -734,7 +809,97 @@ function handle_theme_settings_import() { } // ------------------------------------------------------------------------- - // 7. Menü-Positionen + // 7. Homepage-Seite + // ------------------------------------------------------------------------- + if ( ! empty( $data['homepage'] ) ) { + $homepage_id = get_option( 'page_on_front' ); + if ( $homepage_id ) { + wp_update_post( array( + 'ID' => $homepage_id, + 'post_title' => sanitize_text_field( $data['homepage']['title'] ), + 'post_content' => wp_kses_post( $data['homepage']['content'] ), + 'post_excerpt' => sanitize_textarea_field( $data['homepage']['excerpt'] ), + ) ); + if ( ! empty( $data['homepage']['featured_img'] ) ) { + set_post_thumbnail( $homepage_id, intval( $data['homepage']['featured_img'] ) ); + } + $imported[] = 'Homepage-Seite'; + } + } + + // ------------------------------------------------------------------------- + // 8. Navigation Menüs mit Items + // ------------------------------------------------------------------------- + if ( ! empty( $data['nav_menus'] ) ) { + $menu_id_map = array(); // slug => term_id Mapping für Item-Parent-Zuordnung + + // Alle existierenden Menüs löschen + $existing_menus = wp_get_nav_menus(); + foreach ( $existing_menus as $menu ) { + wp_delete_nav_menu( $menu->term_id ); + } + + // Neue Menüs und Items importieren + foreach ( $data['nav_menus'] as $menu_slug => $menu_data ) { + $new_menu = wp_create_nav_menu( $menu_data['name'] ); + if ( ! is_wp_error( $new_menu ) ) { + $menu_id_map[ $menu_slug ] = $new_menu; + + // Items hinzufügen + if ( ! empty( $menu_data['items'] ) ) { + $item_id_map = array(); // Altes Item ID => Neues Item ID Mapping + + // Erste Runde: Root-Items (parent = 0) + foreach ( $menu_data['items'] as $idx => $item ) { + if ( empty( $item['parent'] ) || $item['parent'] == 0 ) { + $item_id = wp_update_nav_menu_item( $new_menu, 0, array( + 'menu-item-title' => sanitize_text_field( $item['title'] ), + 'menu-item-url' => esc_url_raw( $item['url'] ), + 'menu-item-description' => sanitize_text_field( $item['description'] ), + 'menu-item-type' => sanitize_key( $item['type'] ), + 'menu-item-object' => sanitize_key( $item['object'] ), + 'menu-item-object-id' => intval( $item['object_id'] ), + 'menu-item-target' => sanitize_text_field( $item['target'] ), + 'menu-item-classes' => sanitize_text_field( $item['classes'] ), + 'menu-item-xfn' => sanitize_text_field( $item['xfn'] ), + 'menu-item-status' => 'publish', + ) ); + if ( $item_id && ! is_wp_error( $item_id ) ) { + $item_id_map[ $idx ] = $item_id; + } + } + } + + // Zweite Runde: Sub-Items (parent > 0) + foreach ( $menu_data['items'] as $idx => $item ) { + if ( ! empty( $item['parent'] ) && $item['parent'] > 0 ) { + $parent_item_id = isset( $item_id_map[ $item['parent'] - 1 ] ) ? $item_id_map[ $item['parent'] - 1 ] : 0; + $item_id = wp_update_nav_menu_item( $new_menu, 0, array( + 'menu-item-title' => sanitize_text_field( $item['title'] ), + 'menu-item-url' => esc_url_raw( $item['url'] ), + 'menu-item-description' => sanitize_text_field( $item['description'] ), + 'menu-item-type' => sanitize_key( $item['type'] ), + 'menu-item-object' => sanitize_key( $item['object'] ), + 'menu-item-object-id' => intval( $item['object_id'] ), + 'menu-item-parent-id' => $parent_item_id, + 'menu-item-target' => sanitize_text_field( $item['target'] ), + 'menu-item-classes' => sanitize_text_field( $item['classes'] ), + 'menu-item-xfn' => sanitize_text_field( $item['xfn'] ), + 'menu-item-status' => 'publish', + ) ); + if ( $item_id && ! is_wp_error( $item_id ) ) { + $item_id_map[ $idx ] = $item_id; + } + } + } + } + } + } + $imported[] = 'Navigation Menüs (' . count( $data['nav_menus'] ) . ')'; + } + + // ------------------------------------------------------------------------- + // 9. Menü-Positionen // ------------------------------------------------------------------------- if ( ! empty( $data['nav_menu_locations'] ) ) { set_theme_mod( 'nav_menu_locations', $data['nav_menu_locations'] ); @@ -1501,12 +1666,20 @@ function mm_branding( $show_title_with_logo = false ) { ?> endif; if ( ! function_exists('mm_nav') ) : -function mm_nav( $extra_class = '' ) { ?> +function mm_nav( $extra_class = '' ) { + $menu_style = get_theme_mod( 'header_menu_style', 'classic' ); + ?>