diff --git a/includes/statistik-manager.php b/includes/statistik-manager.php index 1528919..f3c79fd 100644 --- a/includes/statistik-manager.php +++ b/includes/statistik-manager.php @@ -1,13 +1,13 @@ -'; @@ -188,54 +202,113 @@ function statistik_manager_get_statistics() { echo ''; } - // Funktion für das Banner im Header (nach
) - function statistik_manager_display_banner_header() { - add_action('wp_body_open', function() { - statistik_manager_display_banner('top'); - }); - } - - // Falls `wp_body_open` nicht unterstützt wird, als Fallback `wp_footer` nutzen - function statistik_manager_display_banner_header_fallback() { - add_action('wp_footer', function() { - statistik_manager_display_banner('top'); - }, 5); - } - - // Funktion für das Banner im Footer - function statistik_manager_display_banner_footer() { - add_action('wp_footer', function() { - statistik_manager_display_banner('bottom'); - }, 10); - } - - // Banner laden (Header mit Fallback) - if (function_exists('wp_body_open')) { - statistik_manager_display_banner_header(); - } else { - statistik_manager_display_banner_header_fallback(); - } - - // Fix: Admin-Leiste (Wenn Admin angemeldet ist, Banner nach unten verschieben) - function statistik_manager_admin_bar_fix() { - if (is_admin_bar_showing()) { - echo ''; - } else { - echo ''; + // Banner an der richtigen Stelle einhängen – abhängig von der konfigurierten + // Position. Nur wenn das Banner auch wirklich aktiviert ist. + function statistik_manager_register_banner() { + if (!get_option('statistik_manager_banner_enabled', 1)) { + return; } + + $pos = get_option('statistik_manager_banner_position', 'top'); + + if ($pos === 'bottom') { + // Unten: im Footer ausgeben + add_action('wp_footer', function() { + statistik_manager_display_banner('bottom'); + }, 10); + } else { + // Oben: bevorzugt direkt nach , plus Footer-Fallback für Themes + // ohne wp_body_open (die statische Sperre verhindert Doppelausgabe). + add_action('wp_body_open', function() { + statistik_manager_display_banner('top'); + }); + add_action('wp_footer', function() { + statistik_manager_display_banner('top'); + }, 5); + } + + // Abstand für den Seiteninhalt, damit das fixe Banner nichts verdeckt + add_action('wp_head', 'statistik_manager_banner_offset'); + + // Am Seitenende sofort nachrechnen – dann sind Banner und fixe Leisten + // (z. B. ShiftNav) garantiert im DOM, auch wenn DOMContentLoaded spät kommt. + add_action('wp_footer', function() { + echo ''; + }, 999); + } + add_action('wp', 'statistik_manager_register_banner'); + + // Fügt NUR bei aktivem Banner den passenden Abstand hinzu – auf der richtigen + // Seite (oben/unten) und mit Rücksicht auf die WordPress-Admin-Leiste. + function statistik_manager_banner_offset() { + if (!get_option('statistik_manager_banner_enabled', 1)) { + return; + } + + $pos = get_option('statistik_manager_banner_position', 'top'); + $h = 56; // ungefähre Bannerhöhe – nur für den No-JS-Fallback + + // Fallback ohne JavaScript (WordPress verschiebt die Seite für die + // Admin-Leiste bereits selbst per html-margin, daher hier nicht addieren). + echo ''; + + // Mit JavaScript: Banner exakt unter fixe Leisten oben setzen (WP-Admin-Leiste, + // ShiftNav-Menüleiste), sonst verdecken diese es. Der Inhalt wird nur um die + // tatsächliche Bannerhöhe verschoben – zusätzlich zum vorhandenen Abstand + // des Themes, damit das Layout ansonsten unverändert bleibt. + $is_bottom = ($pos === 'bottom') ? 'true' : 'false'; + echo ''; } - add_action('wp_head', 'statistik_manager_admin_bar_fix'); // Shortcode für die Anzeige der Statistiken function statistik_manager_shortcode() {