Minecraft-Modern-Theme/functions.php aktualisiert

This commit is contained in:
2025-11-29 21:54:50 +00:00
parent 88dd9e8c45
commit 75af878db9

View File

@@ -1,240 +1,300 @@
<?php <?php
// Exit if accessed directly. // Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) { if ( ! defined( 'ABSPATH' ) ) {
exit; exit;
} }
// === Theme Setup === // === Theme Setup ===
function minecraft_modern_setup() { function minecraft_modern_setup() {
add_theme_support( 'title-tag' ); add_theme_support( 'title-tag' );
add_theme_support( 'post-thumbnails' ); add_theme_support( 'post-thumbnails' );
// Logo-Unterstützung aktivieren (Maximale Flexibilität) // Logo-Unterstützung aktivieren (Maximale Flexibilität)
add_theme_support( 'custom-logo', array( add_theme_support( 'custom-logo', array(
'height' => 9999, // Sehr hohe Werte, um den Crop-Dialog zu umgehen 'height' => 9999, // Sehr hohe Werte, um den Crop-Dialog zu umgehen
'width' => 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-height' => true,
'flex-width' => true, 'flex-width' => true,
'header-text' => array( 'site-title', 'site-description' ), 'header-text' => array( 'site-title', 'site-description' ),
) ); ) );
// Benutzerdefinierten Hintergrund aktivieren // Benutzerdefinierten Hintergrund aktivieren
add_theme_support( 'custom-background' ); add_theme_support( 'custom-background' );
register_nav_menus( array( register_nav_menus( array(
'primary' => __( 'Hauptmenü', 'minecraft-modern-theme' ), 'primary' => __( 'Hauptmenü', 'minecraft-modern-theme' ),
'footer' => __( 'Footer-Menü', 'minecraft-modern-theme' ), 'footer' => __( 'Footer-Menü', 'minecraft-modern-theme' ),
) ); ) );
add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) ); add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) );
} }
add_action( 'after_setup_theme', 'minecraft_modern_setup' ); add_action( 'after_setup_theme', 'minecraft_modern_setup' );
// === Styles & Scripts laden === // === Styles & Scripts laden ===
function minecraft_modern_scripts() { function minecraft_modern_scripts() {
// Haupt-Stylesheet // Haupt-Stylesheet
wp_enqueue_style( 'minecraft-modern-style', get_stylesheet_uri() ); wp_enqueue_style( 'minecraft-modern-style', get_stylesheet_uri() );
// Swiper.js CSS (von CDN) // Swiper.js CSS (von CDN)
wp_enqueue_style( 'swiper-css', 'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css' ); wp_enqueue_style( 'swiper-css', 'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css' );
// JavaScript für den Header-Scroll-Effekt // JavaScript für den Header-Scroll-Effekt
wp_enqueue_script( wp_enqueue_script(
'minecraft-modern-header-script', 'minecraft-modern-header-script',
get_template_directory_uri() . '/js/header-scroll.js', get_template_directory_uri() . '/js/header-scroll.js',
array(), array(),
'1.0', '1.0',
true true
); );
// Swiper.js JS (von CDN) // NEU: Ankündigungs-Skript laden
wp_enqueue_script( wp_enqueue_script(
'swiper-js', 'announcement-script',
'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js', get_template_directory_uri() . '/js/announcement.js',
array(), array(), // Keine Abhängigkeiten
'8.0.0', '1.0',
true true
); );
// Unsere eigene Slider-Initialisierungs-Datei // Swiper.js JS (von CDN)
wp_enqueue_script( wp_enqueue_script(
'minecraft-modern-slider-script', 'swiper-js',
get_template_directory_uri() . '/js/slider-init.js', 'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js',
array('swiper-js'), // Hängt von Swiper.js ab array(),
'1.0', '8.0.0',
true true
); );
// NEU: Theme-Toggle-Skript laden // Unsere eigene Slider-Initialisierungs-Datei
wp_enqueue_script( wp_enqueue_script(
'theme-toggle-script', 'minecraft-modern-slider-script',
get_template_directory_uri() . '/js/theme-toggle.js', get_template_directory_uri() . '/js/slider-init.js',
array(), // Keine Abhängigkeiten array('swiper-js'), // Hängt von Swiper.js ab
'1.0', '1.0',
true true
); );
// FAQ Skript laden, wenn der Post-Type aktiv ist // NEU: Theme-Toggle-Skript laden
if ( post_type_exists('faq') ) { wp_enqueue_script(
wp_enqueue_script( 'theme-toggle-script',
'faq-accordion-script', get_template_directory_uri() . '/js/theme-toggle.js',
get_template_directory_uri() . '/js/faq-accordion.js', array(), // Keine Abhängigkeiten
array(), '1.0',
'1.0', true
true );
);
} // FAQ Skript laden, wenn der Post-Type aktiv ist
if ( post_type_exists('faq') ) {
// Übergebe ALLE Theme-Einstellungen an das JavaScript wp_enqueue_script(
// KORREKTUR: Der Objektname muss 'sliderSettings' bleiben, damit slider-init.js funktioniert. 'faq-accordion-script',
wp_localize_script( get_template_directory_uri() . '/js/faq-accordion.js',
'minecraft-modern-slider-script', array(),
'sliderSettings', '1.0',
array( true
'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') // Übergebe ALLE Theme-Einstellungen an das JavaScript
) wp_localize_script(
); 'minecraft-modern-slider-script',
'sliderSettings',
// === NEU & WICHTIG: Header-Skript-Informationen übergeben === array(
// Dies verhindert das Flackern im Customizer. 'hideArrows' => get_theme_mod( 'slider_hide_arrows', false ) ? '1' : '0',
wp_localize_script( 'hidePagination' => get_theme_mod( 'slider_hide_pagination', false ) ? '1' : '0',
'minecraft-modern-header-script', // <-- Richtiges Skript-Handle! 'effect' => get_theme_mod( 'slider_effect', 'fade' ),
'headerSettings', // <-- Neuer Objektname für Klarheit 'direction' => get_theme_mod( 'slider_direction', 'horizontal' ),
array( 'defaultMode' => get_theme_mod( 'default_theme_mode', 'dark' ),
'isCustomizer' => is_customize_preview() 'ajax_url' => admin_url('admin-ajax.php')
) )
); );
}
add_action( 'wp_enqueue_scripts', 'minecraft_modern_scripts' ); // === NEU & WICHTIG: Header-Skript-Informationen übergeben ===
// Dies verhindert das Flackern im Customizer.
// === Customizer-Datei laden === wp_localize_script(
require get_template_directory() . '/inc/customizer.php'; 'minecraft-modern-header-script', // <-- Richtiges Skript-Handle!
'headerSettings', // <-- Neuer Objektname für Klarheit
// === Footer-Widgets registrieren === array(
function minecraft_modern_footer_widgets() { 'isCustomizer' => is_customize_preview()
register_sidebar( array( )
'name' => __( 'Footer Links', 'minecraft-modern-theme' ), );
'id' => 'footer-left', }
'description' => __( 'Widget-Bereich links im Footer.', 'minecraft-modern-theme' ), add_action( 'wp_enqueue_scripts', 'minecraft_modern_scripts' );
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>', // === Customizer-Datei laden ===
'before_title' => '<h4 class="widget-title">', require get_template_directory() . '/inc/customizer.php';
'after_title' => '</h4>',
) ); // === Footer-Widgets registrieren ===
for ( $i = 1; $i <= 3; $i++ ) { function minecraft_modern_footer_widgets() {
register_sidebar( array( register_sidebar( array(
'name' => sprintf( __( 'Footer Spalte %d', 'minecraft-modern-theme' ), $i ), 'name' => __( 'Footer Links', 'minecraft-modern-theme' ),
'id' => 'footer-' . $i, 'id' => 'footer-left',
'description' => sprintf( __( 'Widget für die %d. Spalte im Footer.', 'minecraft-modern-theme' ), $i ), 'description' => __( 'Widget-Bereich links im Footer.', 'minecraft-modern-theme' ),
'before_widget' => '<div id="%1$s" class="widget %2$s">', 'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>', 'after_widget' => '</div>',
'before_title' => '<h4 class="widget-title">', 'before_title' => '<h4 class="widget-title">',
'after_title' => '</h4>', 'after_title' => '</h4>',
) ); ) );
} for ( $i = 1; $i <= 3; $i++ ) {
register_sidebar( array( register_sidebar( array(
'name' => __( 'Footer Rechts', 'minecraft-modern-theme' ), 'name' => sprintf( __( 'Footer Spalte %d', 'minecraft-modern-theme' ), $i ),
'id' => 'footer-right', 'id' => 'footer-' . $i,
'description' => __( 'Widget-Bereich rechts im Footer.', 'minecraft-modern-theme' ), 'description' => sprintf( __( 'Widget für die %d. Spalte im Footer.', 'minecraft-modern-theme' ), $i ),
'before_widget' => '<div id="%1$s" class="widget %2$s">', 'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>', 'after_widget' => '</div>',
'before_title' => '<h4 class="widget-title">', 'before_title' => '<h4 class="widget-title">',
'after_title' => '</h4>', 'after_title' => '</h4>',
) ); ) );
} }
add_action( 'widgets_init', 'minecraft_modern_footer_widgets' ); register_sidebar( array(
'name' => __( 'Footer Rechts', 'minecraft-modern-theme' ),
// === FAQ Custom Post Type & Taxonomy === 'id' => 'footer-right',
function create_faq_post_type() { 'description' => __( 'Widget-Bereich rechts im Footer.', 'minecraft-modern-theme' ),
// Nur registrieren, wenn im Customizer aktiviert 'before_widget' => '<div id="%1$s" class="widget %2$s">',
if ( get_theme_mod( 'faq_enabled', true ) ) { 'after_widget' => '</div>',
register_post_type('faq', 'before_title' => '<h4 class="widget-title">',
array( 'after_title' => '</h4>',
'labels' => array( ) );
'name' => __( 'FAQs', 'minecraft-modern-theme' ), }
'singular_name' => __( 'FAQ', 'minecraft-modern-theme' ), add_action( 'widgets_init', 'minecraft_modern_footer_widgets' );
'add_new' => __( 'Neue FAQ hinzufügen', 'minecraft-modern-theme' ),
'add_new_item' => __( 'Neue FAQ hinzufügen', 'minecraft-modern-theme' ), // === FAQ Custom Post Type & Taxonomy ===
'edit_item' => __( 'FAQ bearbeiten', 'minecraft-modern-theme' ), function create_faq_post_type() {
'new_item' => __( 'Neue FAQ', 'minecraft-modern-theme' ), // Nur registrieren, wenn im Customizer aktiviert
'view_item' => __( 'FAQ ansehen', 'minecraft-modern-theme' ), if ( get_theme_mod( 'faq_enabled', true ) ) {
'search_items' => __( 'FAQs durchsuchen', 'minecraft-modern-theme' ), register_post_type('faq',
'not_found' => __( 'Keine FAQs gefunden', 'minecraft-modern-theme' ), array(
'not_found_in_trash' => __( 'Keine FAQs im Papierkorb gefunden', 'minecraft-modern-theme' ), 'labels' => array(
'all_items' => __( 'Alle FAQs', 'minecraft-modern-theme' ), 'name' => __( 'FAQs', 'minecraft-modern-theme' ),
), 'singular_name' => __( 'FAQ', 'minecraft-modern-theme' ),
'public' => true, 'add_new' => __( 'Neue FAQ hinzufügen', 'minecraft-modern-theme' ),
'has_archive' => true, // Archiv-Seite /faq/ bleibt als Fallback 'add_new_item' => __( 'Neue FAQ hinzufügen', 'minecraft-modern-theme' ),
'menu_icon' => 'dashicons-format-chat', 'edit_item' => __( 'FAQ bearbeiten', 'minecraft-modern-theme' ),
'supports' => array( 'title', 'editor', 'page-attributes' ), 'new_item' => __( 'Neue FAQ', 'minecraft-modern-theme' ),
'rewrite' => array( 'slug' => 'faq' ), 'view_item' => __( 'FAQ ansehen', 'minecraft-modern-theme' ),
'show_in_rest' => true, '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' ),
register_taxonomy( 'all_items' => __( 'Alle FAQs', 'minecraft-modern-theme' ),
'faq_category', ),
'faq', 'public' => true,
array( 'has_archive' => true, // Archiv-Seite /faq/ bleibt als Fallback
'label' => __( 'FAQ Kategorien', 'minecraft-modern-theme' ), 'menu_icon' => 'dashicons-format-chat',
'rewrite' => array( 'slug' => 'faq-kategorie' ), 'supports' => array( 'title', 'editor', 'page-attributes' ),
'hierarchical' => true, 'rewrite' => array( 'slug' => 'faq' ),
'show_in_rest' => true, 'show_in_rest' => true,
) )
); );
} register_taxonomy(
} 'faq_category',
add_action('init', 'create_faq_post_type'); 'faq',
array(
'label' => __( 'FAQ Kategorien', 'minecraft-modern-theme' ),
// ============================================================================= 'rewrite' => array( 'slug' => 'faq-kategorie' ),
// NEU: Automatische FAQ-Seitenerstellung und Template-Zuweisung 'hierarchical' => true,
// ============================================================================= 'show_in_rest' => true,
)
/** );
* Erstellt automatisch eine "FAQ" Seite, wenn die FAQ-Funktion aktiviert wird. }
*/ }
function create_faq_page_automatically() { add_action('init', 'create_faq_post_type');
// Prüfen, ob die FAQ-Funktion aktiv ist
if ( get_theme_mod( 'faq_enabled', true ) ) { // =============================================================================
// Prüfen, ob die Seite bereits existiert // NEU: Automatische "Home" Seitenerstellung und Zuweisung (kombiniert)
if ( get_page_by_title( 'FAQ' ) == null ) { // =============================================================================
// Seite erstellen
$new_page = array( /**
'post_title' => 'FAQ', * Erstellt die "Home" Seite und weist sie automatisch als statische Startseite zu,
'post_content' => 'Diese Seite zeigt alle FAQs an. Der Inhalt wird automatisch generiert.', * wenn das Theme aktiviert wird und noch keine Seite festgelegt ist.
'post_status' => 'publish', */
'post_type' => 'page', function set_static_front_page_automatically() {
'post_author' => 1, // Nur ausführen, wenn noch keine statische Seite als Startseite festgelegt ist
); if ( 'page' !== get_option( 'show_on_front' ) ) {
// Seite in die Datenbank einfügen
wp_insert_post( $new_page ); // 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
// Diese Funktion wird ausgeführt, wenn der Customizer gespeichert wird. $home_page_id = wp_insert_post( array(
add_action( 'customize_save_after', 'create_faq_page_automatically' ); 'post_title' => 'Home',
'post_content' => 'Diese Seite dient als statische Startseite.',
'post_status' => 'publish',
/** 'post_type' => 'page',
* Leitet Anfragen für die "FAQ" Seite auf unser spezielles Template um. 'post_author' => 1,
*/ ) );
function load_faq_page_template( $template ) { } else {
// Prüfen, ob die FAQ-Funktion aktiv ist $home_page_id = $home_page->ID;
if ( get_theme_mod( 'faq_enabled', true ) ) { }
// Prüfen, ob wir uns auf einer Seite befinden
if ( is_page() ) { // Setze die Seite als statische Startseite
global $post; if ( $home_page_id ) {
// Prüfen, ob der Titel der Seite "FAQ" ist update_option( 'show_on_front', 'page' );
if ( $post && $post->post_title == 'FAQ' ) { update_option( 'page_on_front', $home_page_id );
// Pfad zu unserem Template zurückgeben }
return get_template_directory() . '/archive-faq.php'; }
} }
} add_action( 'after_switch_theme', 'set_static_front_page_automatically' );
}
// Standard-Template in allen anderen Fällen
return $template; /**
} * Fügt eine Body-Klasse hinzu, um den Home-Titel per CSS auszublenden.
add_filter( 'template_include', 'load_faq_page_template' ); */
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' );