diff --git a/Minecraft-Modern-Theme/functions.php b/Minecraft-Modern-Theme/functions.php index 3b4fc4f..f4c1fdf 100644 --- a/Minecraft-Modern-Theme/functions.php +++ b/Minecraft-Modern-Theme/functions.php @@ -1,240 +1,300 @@ - 9999, // Sehr hohe Werte, um den Crop-Dialog zu umgehen - 'width' => 9999, // Sehr hohe Werte, um den Crop-Dialog zu umgehen - 'flex-height' => true, - 'flex-width' => true, - 'header-text' => array( 'site-title', 'site-description' ), - ) ); - - // Benutzerdefinierten Hintergrund aktivieren - add_theme_support( 'custom-background' ); - - register_nav_menus( array( - 'primary' => __( 'Hauptmenü', 'minecraft-modern-theme' ), - 'footer' => __( 'Footer-Menü', 'minecraft-modern-theme' ), - ) ); - add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) ); -} -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() ); - - // Swiper.js CSS (von CDN) - wp_enqueue_style( 'swiper-css', 'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css' ); - - // JavaScript für den Header-Scroll-Effekt - wp_enqueue_script( - 'minecraft-modern-header-script', - get_template_directory_uri() . '/js/header-scroll.js', - array(), - '1.0', - true - ); - - // Swiper.js JS (von CDN) - wp_enqueue_script( - 'swiper-js', - 'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js', - array(), - '8.0.0', - true - ); - - // Unsere eigene Slider-Initialisierungs-Datei - wp_enqueue_script( - 'minecraft-modern-slider-script', - get_template_directory_uri() . '/js/slider-init.js', - array('swiper-js'), // Hängt von Swiper.js ab - '1.0', - true - ); - - // NEU: Theme-Toggle-Skript laden - wp_enqueue_script( - 'theme-toggle-script', - get_template_directory_uri() . '/js/theme-toggle.js', - array(), // Keine Abhängigkeiten - '1.0', - true - ); - - // FAQ Skript laden, wenn der Post-Type aktiv ist - if ( post_type_exists('faq') ) { - wp_enqueue_script( - 'faq-accordion-script', - get_template_directory_uri() . '/js/faq-accordion.js', - array(), - '1.0', - true - ); - } - - // Übergebe ALLE Theme-Einstellungen an das JavaScript - // KORREKTUR: Der Objektname muss 'sliderSettings' bleiben, damit slider-init.js funktioniert. - wp_localize_script( - 'minecraft-modern-slider-script', - 'sliderSettings', - array( - 'hideArrows' => get_theme_mod( 'slider_hide_arrows', false ) ? '1' : '0', - 'hidePagination' => get_theme_mod( 'slider_hide_pagination', false ) ? '1' : '0', - 'defaultMode' => get_theme_mod( 'default_theme_mode', 'dark' ), - 'ajax_url' => admin_url('admin-ajax.php') - ) - ); - - // === NEU & WICHTIG: Header-Skript-Informationen übergeben === - // Dies verhindert das Flackern im Customizer. - wp_localize_script( - 'minecraft-modern-header-script', // <-- Richtiges Skript-Handle! - 'headerSettings', // <-- Neuer Objektname für Klarheit - array( - 'isCustomizer' => is_customize_preview() - ) - ); -} -add_action( 'wp_enqueue_scripts', 'minecraft_modern_scripts' ); - -// === Customizer-Datei laden === -require get_template_directory() . '/inc/customizer.php'; - -// === Footer-Widgets registrieren === -function minecraft_modern_footer_widgets() { - register_sidebar( array( - 'name' => __( 'Footer Links', 'minecraft-modern-theme' ), - 'id' => 'footer-left', - 'description' => __( 'Widget-Bereich links im Footer.', 'minecraft-modern-theme' ), - 'before_widget' => '
', - 'after_widget' => '
', - 'before_title' => '

', - 'after_title' => '

', - ) ); - for ( $i = 1; $i <= 3; $i++ ) { - register_sidebar( array( - 'name' => sprintf( __( 'Footer Spalte %d', 'minecraft-modern-theme' ), $i ), - 'id' => 'footer-' . $i, - 'description' => sprintf( __( 'Widget für die %d. Spalte im Footer.', 'minecraft-modern-theme' ), $i ), - 'before_widget' => '
', - 'after_widget' => '
', - 'before_title' => '

', - 'after_title' => '

', - ) ); - } - register_sidebar( array( - 'name' => __( 'Footer Rechts', 'minecraft-modern-theme' ), - 'id' => 'footer-right', - 'description' => __( 'Widget-Bereich rechts im Footer.', 'minecraft-modern-theme' ), - 'before_widget' => '
', - 'after_widget' => '
', - 'before_title' => '

', - 'after_title' => '

', - ) ); -} -add_action( 'widgets_init', 'minecraft_modern_footer_widgets' ); - -// === FAQ Custom Post Type & Taxonomy === -function create_faq_post_type() { - // Nur registrieren, wenn im Customizer aktiviert - if ( get_theme_mod( 'faq_enabled', true ) ) { - register_post_type('faq', - array( - 'labels' => array( - 'name' => __( 'FAQs', 'minecraft-modern-theme' ), - 'singular_name' => __( 'FAQ', 'minecraft-modern-theme' ), - 'add_new' => __( 'Neue FAQ hinzufügen', 'minecraft-modern-theme' ), - 'add_new_item' => __( 'Neue FAQ hinzufügen', 'minecraft-modern-theme' ), - 'edit_item' => __( 'FAQ bearbeiten', 'minecraft-modern-theme' ), - 'new_item' => __( 'Neue FAQ', 'minecraft-modern-theme' ), - 'view_item' => __( 'FAQ ansehen', 'minecraft-modern-theme' ), - 'search_items' => __( 'FAQs durchsuchen', 'minecraft-modern-theme' ), - 'not_found' => __( 'Keine FAQs gefunden', 'minecraft-modern-theme' ), - 'not_found_in_trash' => __( 'Keine FAQs im Papierkorb gefunden', 'minecraft-modern-theme' ), - 'all_items' => __( 'Alle FAQs', 'minecraft-modern-theme' ), - ), - 'public' => true, - 'has_archive' => true, // Archiv-Seite /faq/ bleibt als Fallback - 'menu_icon' => 'dashicons-format-chat', - 'supports' => array( 'title', 'editor', 'page-attributes' ), - 'rewrite' => array( 'slug' => 'faq' ), - 'show_in_rest' => true, - ) - ); - register_taxonomy( - 'faq_category', - 'faq', - array( - 'label' => __( 'FAQ Kategorien', 'minecraft-modern-theme' ), - 'rewrite' => array( 'slug' => 'faq-kategorie' ), - 'hierarchical' => true, - 'show_in_rest' => true, - ) - ); - } -} -add_action('init', 'create_faq_post_type'); - - -// ============================================================================= -// NEU: Automatische FAQ-Seitenerstellung und Template-Zuweisung -// ============================================================================= - -/** - * Erstellt automatisch eine "FAQ" Seite, wenn die FAQ-Funktion aktiviert wird. - */ -function create_faq_page_automatically() { - // Prüfen, ob die FAQ-Funktion aktiv ist - if ( get_theme_mod( 'faq_enabled', true ) ) { - // Prüfen, ob die Seite bereits existiert - if ( get_page_by_title( 'FAQ' ) == null ) { - // Seite erstellen - $new_page = array( - 'post_title' => 'FAQ', - 'post_content' => 'Diese Seite zeigt alle FAQs an. Der Inhalt wird automatisch generiert.', - 'post_status' => 'publish', - 'post_type' => 'page', - 'post_author' => 1, - ); - // Seite in die Datenbank einfügen - wp_insert_post( $new_page ); - } - } -} -// Diese Funktion wird ausgeführt, wenn der Customizer gespeichert wird. -add_action( 'customize_save_after', 'create_faq_page_automatically' ); - - -/** - * Leitet Anfragen für die "FAQ" Seite auf unser spezielles Template um. - */ -function load_faq_page_template( $template ) { - // Prüfen, ob die FAQ-Funktion aktiv ist - if ( get_theme_mod( 'faq_enabled', true ) ) { - // Prüfen, ob wir uns auf einer Seite befinden - if ( is_page() ) { - global $post; - // Prüfen, ob der Titel der Seite "FAQ" ist - if ( $post && $post->post_title == 'FAQ' ) { - // Pfad zu unserem Template zurückgeben - return get_template_directory() . '/archive-faq.php'; - } - } - } - // Standard-Template in allen anderen Fällen - return $template; -} -add_filter( 'template_include', 'load_faq_page_template' ); \ No newline at end of file + 9999, // Sehr hohe Werte, um den Crop-Dialog zu umgehen + 'width' => 9999, // Sehr hohe Werte, um den Crop-Dialog zu umgehen + 'flex-height' => true, + 'flex-width' => true, + 'header-text' => array( 'site-title', 'site-description' ), + ) ); + + // Benutzerdefinierten Hintergrund aktivieren + add_theme_support( 'custom-background' ); + + register_nav_menus( array( + 'primary' => __( 'Hauptmenü', 'minecraft-modern-theme' ), + 'footer' => __( 'Footer-Menü', 'minecraft-modern-theme' ), + ) ); + add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) ); +} +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() ); + + // Swiper.js CSS (von CDN) + wp_enqueue_style( 'swiper-css', 'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css' ); + + // JavaScript für den Header-Scroll-Effekt + wp_enqueue_script( + 'minecraft-modern-header-script', + get_template_directory_uri() . '/js/header-scroll.js', + array(), + '1.0', + true + ); + + // NEU: Ankündigungs-Skript laden + wp_enqueue_script( + 'announcement-script', + get_template_directory_uri() . '/js/announcement.js', + array(), // Keine Abhängigkeiten + '1.0', + true + ); + + // Swiper.js JS (von CDN) + wp_enqueue_script( + 'swiper-js', + 'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js', + array(), + '8.0.0', + true + ); + + // Unsere eigene Slider-Initialisierungs-Datei + wp_enqueue_script( + 'minecraft-modern-slider-script', + get_template_directory_uri() . '/js/slider-init.js', + array('swiper-js'), // Hängt von Swiper.js ab + '1.0', + true + ); + + // NEU: Theme-Toggle-Skript laden + wp_enqueue_script( + 'theme-toggle-script', + get_template_directory_uri() . '/js/theme-toggle.js', + array(), // Keine Abhängigkeiten + '1.0', + true + ); + + // FAQ Skript laden, wenn der Post-Type aktiv ist + if ( post_type_exists('faq') ) { + wp_enqueue_script( + 'faq-accordion-script', + get_template_directory_uri() . '/js/faq-accordion.js', + array(), + '1.0', + true + ); + } + + // Übergebe ALLE Theme-Einstellungen an das JavaScript + wp_localize_script( + 'minecraft-modern-slider-script', + 'sliderSettings', + array( + 'hideArrows' => get_theme_mod( 'slider_hide_arrows', false ) ? '1' : '0', + 'hidePagination' => get_theme_mod( 'slider_hide_pagination', false ) ? '1' : '0', + 'effect' => get_theme_mod( 'slider_effect', 'fade' ), + 'direction' => get_theme_mod( 'slider_direction', 'horizontal' ), + 'defaultMode' => get_theme_mod( 'default_theme_mode', 'dark' ), + 'ajax_url' => admin_url('admin-ajax.php') + ) + ); + + // === NEU & WICHTIG: Header-Skript-Informationen übergeben === + // Dies verhindert das Flackern im Customizer. + wp_localize_script( + 'minecraft-modern-header-script', // <-- Richtiges Skript-Handle! + 'headerSettings', // <-- Neuer Objektname für Klarheit + array( + 'isCustomizer' => is_customize_preview() + ) + ); +} +add_action( 'wp_enqueue_scripts', 'minecraft_modern_scripts' ); + +// === Customizer-Datei laden === +require get_template_directory() . '/inc/customizer.php'; + +// === Footer-Widgets registrieren === +function minecraft_modern_footer_widgets() { + register_sidebar( array( + 'name' => __( 'Footer Links', 'minecraft-modern-theme' ), + 'id' => 'footer-left', + 'description' => __( 'Widget-Bereich links im Footer.', 'minecraft-modern-theme' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + for ( $i = 1; $i <= 3; $i++ ) { + register_sidebar( array( + 'name' => sprintf( __( 'Footer Spalte %d', 'minecraft-modern-theme' ), $i ), + 'id' => 'footer-' . $i, + 'description' => sprintf( __( 'Widget für die %d. Spalte im Footer.', 'minecraft-modern-theme' ), $i ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + } + register_sidebar( array( + 'name' => __( 'Footer Rechts', 'minecraft-modern-theme' ), + 'id' => 'footer-right', + 'description' => __( 'Widget-Bereich rechts im Footer.', 'minecraft-modern-theme' ), + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); +} +add_action( 'widgets_init', 'minecraft_modern_footer_widgets' ); + +// === FAQ Custom Post Type & Taxonomy === +function create_faq_post_type() { + // Nur registrieren, wenn im Customizer aktiviert + if ( get_theme_mod( 'faq_enabled', true ) ) { + register_post_type('faq', + array( + 'labels' => array( + 'name' => __( 'FAQs', 'minecraft-modern-theme' ), + 'singular_name' => __( 'FAQ', 'minecraft-modern-theme' ), + 'add_new' => __( 'Neue FAQ hinzufügen', 'minecraft-modern-theme' ), + 'add_new_item' => __( 'Neue FAQ hinzufügen', 'minecraft-modern-theme' ), + 'edit_item' => __( 'FAQ bearbeiten', 'minecraft-modern-theme' ), + 'new_item' => __( 'Neue FAQ', 'minecraft-modern-theme' ), + 'view_item' => __( 'FAQ ansehen', 'minecraft-modern-theme' ), + 'search_items' => __( 'FAQs durchsuchen', 'minecraft-modern-theme' ), + 'not_found' => __( 'Keine FAQs gefunden', 'minecraft-modern-theme' ), + 'not_found_in_trash' => __( 'Keine FAQs im Papierkorb gefunden', 'minecraft-modern-theme' ), + 'all_items' => __( 'Alle FAQs', 'minecraft-modern-theme' ), + ), + 'public' => true, + 'has_archive' => true, // Archiv-Seite /faq/ bleibt als Fallback + 'menu_icon' => 'dashicons-format-chat', + 'supports' => array( 'title', 'editor', 'page-attributes' ), + 'rewrite' => array( 'slug' => 'faq' ), + 'show_in_rest' => true, + ) + ); + register_taxonomy( + 'faq_category', + 'faq', + array( + 'label' => __( 'FAQ Kategorien', 'minecraft-modern-theme' ), + 'rewrite' => array( 'slug' => 'faq-kategorie' ), + 'hierarchical' => true, + 'show_in_rest' => true, + ) + ); + } +} +add_action('init', 'create_faq_post_type'); + +// ============================================================================= +// NEU: Automatische "Home" Seitenerstellung und Zuweisung (kombiniert) +// ============================================================================= + +/** + * Erstellt die "Home" Seite und weist sie automatisch als statische Startseite zu, + * wenn das Theme aktiviert wird und noch keine Seite festgelegt ist. + */ +function set_static_front_page_automatically() { + // Nur ausführen, wenn noch keine statische Seite als Startseite festgelegt ist + if ( 'page' !== get_option( 'show_on_front' ) ) { + + // Finde die "Home" Seite (oder erstelle sie, falls sie nicht existiert) + $home_page = get_page_by_title( 'Home' ); + if ( ! $home_page ) { + // Seite erstellen, falls sie nicht existiert + $home_page_id = wp_insert_post( array( + 'post_title' => 'Home', + 'post_content' => 'Diese Seite dient als statische Startseite.', + 'post_status' => 'publish', + 'post_type' => 'page', + 'post_author' => 1, + ) ); + } else { + $home_page_id = $home_page->ID; + } + + // Setze die Seite als statische Startseite + if ( $home_page_id ) { + update_option( 'show_on_front', 'page' ); + update_option( 'page_on_front', $home_page_id ); + } + } +} +add_action( 'after_switch_theme', 'set_static_front_page_automatically' ); + + +/** + * Fügt eine Body-Klasse hinzu, um den Home-Titel per CSS auszublenden. + */ +function add_home_body_class( $classes ) { + // Prüfen, ob wir auf der Startseite sind und die Einstellung zum Ausblenden aktiv ist + if ( is_front_page() && !get_theme_mod( 'show_home_title', true ) ) { + $classes[] = 'home-title-hidden'; + } + return $classes; +} +add_filter( 'body_class', 'add_home_body_class' ); + + +// ============================================================================= +// Automatische FAQ-Seitenerstellung und Template-Zuweisung +// ============================================================================= + +/** + * Erstellt automatisch eine "FAQ" Seite, wenn die FAQ-Funktion aktiviert wird. + */ +function create_faq_page_automatically() { + // Prüfen, ob die FAQ-Funktion aktiv ist + if ( get_theme_mod( 'faq_enabled', true ) ) { + // Prüfen, ob die Seite bereits existiert + if ( get_page_by_title( 'FAQ' ) == null ) { + // Seite erstellen + $new_page = array( + 'post_title' => 'FAQ', + 'post_content' => 'Diese Seite zeigt alle FAQs an. Der Inhalt wird automatisch generiert.', + 'post_status' => 'publish', + 'post_type' => 'page', + 'post_author' => 1, + ); + // Seite in die Datenbank einfügen + wp_insert_post( $new_page ); + } + } +} +// Diese Funktion wird ausgeführt, wenn der Customizer gespeichert wird. +add_action( 'customize_save_after', 'create_faq_page_automatically' ); + + +/** + * Leitet Anfragen für die "FAQ" Seite auf unser spezielles Template um. + */ +function load_faq_page_template( $template ) { + // Prüfen, ob die FAQ-Funktion aktiv ist + if ( get_theme_mod( 'faq_enabled', true ) ) { + // Prüfen, ob wir uns auf einer Seite befinden + if ( is_page() ) { + global $post; + // Prüfen, ob der Titel der Seite "FAQ" ist + if ( $post && $post->post_title == 'FAQ' ) { + // Pfad zu unserem Template zurückgeben + return get_template_directory() . '/archive-faq.php'; + } + } + } + // Standard-Template in allen anderen Fällen + return $template; +} +add_filter( 'template_include', 'load_faq_page_template' ); +