diff --git a/Minecraft-Modern-Theme/clear-cache.php b/Minecraft-Modern-Theme/clear-cache.php index af7c614..c9fcafb 100644 --- a/Minecraft-Modern-Theme/clear-cache.php +++ b/Minecraft-Modern-Theme/clear-cache.php @@ -2,6 +2,11 @@ define('WP_USE_THEMES', false); require('../../../wp-load.php'); +if ( php_sapi_name() !== 'cli' && ! current_user_can( 'manage_options' ) ) { + http_response_code( 403 ); + exit( 'Forbidden: Admin-Login erforderlich.' ); +} + global $wpdb; $deleted1 = $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_mm_yt_live%'"); $deleted2 = $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_mm_yt_live%'"); diff --git a/Minecraft-Modern-Theme/clear-livestream-cache.php b/Minecraft-Modern-Theme/clear-livestream-cache.php index e393a08..3e19d10 100644 --- a/Minecraft-Modern-Theme/clear-livestream-cache.php +++ b/Minecraft-Modern-Theme/clear-livestream-cache.php @@ -6,6 +6,11 @@ define('WP_USE_THEMES', false); require('../../../wp-load.php'); +if ( php_sapi_name() !== 'cli' && ! current_user_can( 'manage_options' ) ) { + http_response_code( 403 ); + exit( 'Forbidden: Admin-Login erforderlich.' ); +} + echo "=== Cache löschen ===\n\n"; // Zähler diff --git a/Minecraft-Modern-Theme/functions.php b/Minecraft-Modern-Theme/functions.php index bbbd3f8..37f8325 100644 --- a/Minecraft-Modern-Theme/functions.php +++ b/Minecraft-Modern-Theme/functions.php @@ -1,3939 +1,34 @@ 9999, - 'width' => 9999, - 'flex-height' => true, - 'flex-width' => true, - 'header_text' => array( 'site-title', 'site-description' ), - ) ); - - add_theme_support( 'custom-background' ); - - register_nav_menus( array( - 'primary' => __( 'Hauptmenü', 'minecraft-modern-theme' ), - 'footer' => __( 'Footer-Menü', 'minecraft-modern-theme' ), - ) ); - - // FIX: 'script' und 'style' ergänzt für sauberes HTML5-Output-Format - add_theme_support( 'html5', array( - 'search-form', 'comment-form', 'comment-list', - 'gallery', 'caption', 'script', 'style', - ) ); -} -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(), 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' ); - - // Header-Scroll + Suche Toggle - wp_enqueue_script( - 'minecraft-modern-header-script', - get_template_directory_uri() . '/js/header-scroll.js', - array(), - filemtime( get_template_directory() . '/js/header-scroll.js' ), - true - ); - - // Navigation (Dropdown + Außenklick-Schließen) - wp_enqueue_script( - 'minecraft-navigation', - get_template_directory_uri() . '/js/navigation.js', - array(), - '1.1', - true - ); - - // Swiper.js - wp_enqueue_script( - 'swiper-js', - 'https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js', - array(), - '8.0.0', - true - ); - - // Slider-Init - wp_enqueue_script( - 'minecraft-modern-slider-script', - get_template_directory_uri() . '/js/slider-init.js', - array( 'swiper-js' ), - '1.1', - true - ); - - // Theme Toggle - wp_enqueue_script( - 'theme-toggle-script', - get_template_directory_uri() . '/js/theme-toggle.js', - array(), - '1.1', - true - ); - - // BUG-FIX: post_type_exists('faq') prüft nur ob der CPT registriert ist, nicht ob wir - // auf einer FAQ-Seite sind – das Script wurde damit seitenübergreifend geladen. - // Jetzt: nur auf FAQ-Archiv-, Einzel- und Seiten mit FAQ-Template laden. - if ( post_type_exists( 'faq' ) && ( is_post_type_archive( 'faq' ) || is_singular( 'faq' ) || is_page( 'FAQ' ) || is_page( 'faq' ) ) ) { - wp_enqueue_script( - 'faq-accordion-script', - get_template_directory_uri() . '/js/faq-accordion.js', - array(), - '1.0', - true - ); - } - - // FIX: 'loop' ergänzt – war in slider-init.js als sliderSettings.loop referenziert, aber nie übergeben - 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' ), - 'loop' => get_theme_mod( 'slider_loop', true ) ? '1' : '0', - 'ajax_url' => admin_url( 'admin-ajax.php' ), - ) - ); - - wp_localize_script( - 'minecraft-modern-header-script', - 'headerSettings', - array( - 'isCustomizer' => is_customize_preview(), - ) - ); -} -add_action( 'wp_enqueue_scripts', 'minecraft_modern_scripts' ); - - -// FIX: Scroll-to-Top via Customizer ein-/ausblendbar -function minecraft_modern_scroll_to_top_css() { - if ( ! get_theme_mod( 'show_scroll_to_top', true ) ) { - wp_add_inline_style( 'minecraft-modern-style', '#scroll-to-top { display: none !important; }' ); - } -} -add_action( 'wp_enqueue_scripts', 'minecraft_modern_scroll_to_top_css', 25 ); - - -// === Customizer-Datei laden === +require get_template_directory() . '/inc/theme-setup.php'; 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'; - - -// === 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' => '
', - 'before_title' => 'Diese Leiste wird auf allen Seiten angezeigt. Die Vorschau unten zeigt sofort, wie die Ankündigung aussieht — Änderungen wirken direkt in der Vorschau, erst nach Änderungen speichern werden sie im Frontend übernommen.
- - -- - -
- id !== 'toplevel_page_mm-team-manager' ) return; - echo ''; -} -add_action( 'admin_head', 'mm_team_manager_admin_css' ); - -function mm_team_manager_page_html() { - ?> -Hier kannst du Teammitglieder hinzufügen, sortieren und bearbeiten.
- -| Bild | -Name | -Rang | -Bio | -UUID / Bild | -Sort. | -Aktionen | -
|---|---|---|---|---|---|---|
| - - | -- | - | - |
-
-
-
-
-
-
-
-
- |
- - - - | -- - - | -Noch keine Mitglieder vorhanden. | '; - endif; - ?> - -
←
- -' . esc_html($desc_n) . '
' . esc_html($desc_s) . '
' . esc_html($desc_m) . '
| - |
-
- - - - |
-
|---|---|
| - | - - - | -
| - |
-
-
-
-
- - - - - |
-
| - |
-
- - - - |
-
|---|---|
| - |
-
- - - - |
-
| - |
-
- - - - |
-
| - | - - | -
| ' . esc_html($label) . ' | '; - echo '';
- if ( $is_long ) {
- echo ' ' . esc_html($val) . ' ';
- } else {
- echo '' . esc_html($val) . '';
- }
- echo ' |
|---|
1&&u.push(e.virtualSize-r)}if(0===u.length&&(u=[0]),0!==a.spaceBetween){const s=e.isHorizontal()&&n?"marginLeft":t("marginRight");c.filter(((e,t)=>!a.cssMode||t!==c.length-1)).css({[s]:`${x}px`})}if(a.centeredSlides&&a.centeredSlidesBounds){let e=0;m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween;const t=e-r;u=u.map((e=>e<0?-f:e>t?t+g:e))}if(a.centerInsufficientSlides){let e=0;if(m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween,e {r.wrapperEl.style.scrollSnapType="",r._swiperImmediateVirtual=!1}))}else{if(!r.support.smoothScroll)return w({swiper:r,targetPosition:s,side:e?"left":"top"}),!0;h.scrollTo({[e?"left":"top"]:s,behavior:"smooth"})}return!0}return r.setTransition(t),r.setTranslate(v),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(s,b),0===t?r.transitionEnd(s,b):r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(s,b))}),r.$wrapperEl[0].addEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd)),!0},slideToLoop:function(e,t,s,a){if(void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===s&&(s=!0),"string"==typeof e){const t=parseInt(e,10);if(!isFinite(t))throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`);e=t}const i=this;let r=e;return i.params.loop&&(r+=i.loopedSlides),i.slideTo(r,t,s,a)},slideNext:function(e,t,s){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);const a=this,{animating:i,enabled:r,params:n}=a;if(!r)return a;let l=n.slidesPerGroup;"auto"===n.slidesPerView&&1===n.slidesPerGroup&&n.slidesPerGroupAuto&&(l=Math.max(a.slidesPerViewDynamic("current",!0),1));const o=a.activeIndex0&&o(u(t));const a=e.children(`.${s.slidePrevClass}`);a.length>0&&o(u(a))}}function p(){const e=r();if(!t||t.destroyed)return;const s=t.params.lazy.scrollingElement?d(t.params.lazy.scrollingElement):d(e),a=s[0]===e,i=a?e.innerWidth:s[0].offsetWidth,l=a?e.innerHeight:s[0].offsetHeight,o=t.$el.offset(),{rtlTranslate:u}=t;let h=!1;u&&(o.left-=t.$el[0].scrollLeft);const m=[[o.left,o.top],[o.left+t.width,o.top],[o.left,o.top+t.height],[o.left+t.width,o.top+t.height]];for(let e=0;e