init(); } /** * Initialize the module */ private function init() { // Frontend hooks for injecting tracking codes add_action('wp_head', array($this, 'inject_google_analytics'), 2); add_action('wp_head', array($this, 'inject_google_tag_manager_head'), 1); add_action('wp_body_open', array($this, 'inject_google_tag_manager_body')); add_action('wp_head', array($this, 'inject_site_verification'), 3); // Admin hooks if (is_admin()) { add_action('admin_post_update_google_setup', array($this, 'handle_form_submission')); } } /** * Handle form submission */ public function handle_form_submission() { // Verify nonce if (!wp_verify_nonce($_POST['google_setup_nonce'], 'update_google_setup')) { wp_die(__('Security check failed', 'tigerstyle-heat')); } // Check permissions if (!current_user_can('manage_options')) { wp_die(__('You do not have sufficient permissions', 'tigerstyle-heat')); } // Sanitize and save settings $google_analytics_id = sanitize_text_field($_POST['google_analytics_id'] ?? ''); $google_tag_manager_id = sanitize_text_field($_POST['google_tag_manager_id'] ?? ''); $google_site_verification = sanitize_text_field($_POST['google_site_verification'] ?? ''); $adsense_publisher_id = sanitize_text_field($_POST['adsense_publisher_id'] ?? ''); $google_my_business_id = sanitize_text_field($_POST['google_my_business_id'] ?? ''); // Enhanced ecommerce settings $enhanced_ecommerce = isset($_POST['enhanced_ecommerce']) ? 1 : 0; $track_outbound_links = isset($_POST['track_outbound_links']) ? 1 : 0; $track_downloads = isset($_POST['track_downloads']) ? 1 : 0; // Update options update_option('google_analytics_id', $google_analytics_id); update_option('google_tag_manager_id', $google_tag_manager_id); update_option('google_site_verification', $google_site_verification); update_option('adsense_publisher_id', $adsense_publisher_id); update_option('google_my_business_id', $google_my_business_id); update_option('google_enhanced_ecommerce', $enhanced_ecommerce); update_option('google_track_outbound_links', $track_outbound_links); update_option('google_track_downloads', $track_downloads); // Redirect with success message wp_redirect(admin_url('admin.php?page=tigerstyle-heat&message=google_setup_updated')); exit; } /** * Inject Google Analytics tracking code * Now with TigerStyle Whiskers consent awareness! 🐱 */ public function inject_google_analytics() { $analytics_id = get_option('google_analytics_id', ''); if (empty($analytics_id)) { return; } // Check TigerStyle Whiskers consent status if (!$this->has_analytics_consent()) { // Inject consent-conditional loading $this->inject_consent_conditional_analytics($analytics_id); return; } // Check if it's GA4 or Universal Analytics if (strpos($analytics_id, 'G-') === 0) { // GA4 implementation $this->inject_ga4_tracking($analytics_id); } elseif (strpos($analytics_id, 'UA-') === 0) { // Universal Analytics implementation (legacy) $this->inject_universal_analytics($analytics_id); } } /** * Inject GA4 tracking code */ private function inject_ga4_tracking($analytics_id) { $enhanced_ecommerce = get_option('google_enhanced_ecommerce', 0); $track_outbound = get_option('google_track_outbound_links', 0); $track_downloads = get_option('google_track_downloads', 0); echo "\n\n"; echo '' . "\n"; echo '' . "\n"; echo "\n"; } /** * Inject Universal Analytics tracking code (legacy) */ private function inject_universal_analytics($analytics_id) { echo "\n\n"; echo '' . "\n"; echo '' . "\n"; echo "\n"; } /** * Check if user has given analytics consent via TigerStyle Whiskers */ private function has_analytics_consent() { // Check if TigerStyle Whiskers is active if (!class_exists('TigerStyleWhiskers') && !class_exists('TigerStyleWhiskers_CookieConsent')) { // Whiskers not active, allow analytics (backward compatibility) return true; } // Check cookie consent directly from cookie if (isset($_COOKIE['tigerstyle_whiskers_consent'])) { $consent_data = json_decode(stripslashes($_COOKIE['tigerstyle_whiskers_consent']), true); return isset($consent_data['analytics']) && $consent_data['analytics'] === true; } // Check via Whiskers API if available if (class_exists('TigerStyleWhiskers_CookieConsent')) { return TigerStyleWhiskers_CookieConsent::instance()->has_analytics_consent(); } // Default to no consent if Whiskers is active but no consent given return false; } /** * Inject consent-conditional analytics that loads when consent is granted */ private function inject_consent_conditional_analytics($analytics_id) { echo "\n\n"; echo '' . "\n"; echo "\n"; } /** * Inject Google Tag Manager head code */ public function inject_google_tag_manager_head() { $gtm_id = get_option('google_tag_manager_id', ''); if (empty($gtm_id)) { return; } echo "\n\n"; echo '' . "\n"; echo "\n"; } /** * Inject Google Tag Manager body code */ public function inject_google_tag_manager_body() { $gtm_id = get_option('google_tag_manager_id', ''); if (empty($gtm_id)) { return; } echo "\n\n"; echo '' . "\n"; echo "\n"; } /** * Inject Google Site Verification meta tag */ public function inject_site_verification() { $verification_code = get_option('google_site_verification', ''); if (empty($verification_code)) { return; } echo '' . "\n"; } /** * Get outbound link tracking script */ private function get_outbound_link_tracking_script() { return ' // Outbound link tracking document.addEventListener("click", function(e) { var link = e.target.closest("a"); if (link && link.hostname !== window.location.hostname) { gtag("event", "click", { event_category: "outbound", event_label: link.href, transport_type: "beacon" }); } }); '; } /** * Get download tracking script */ private function get_download_tracking_script() { return ' // Download tracking document.addEventListener("click", function(e) { var link = e.target.closest("a"); if (link && link.href) { var filePath = link.pathname; var fileExtension = filePath.split(".").pop().toLowerCase(); var downloadExtensions = ["pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "zip", "rar", "mp3", "mp4", "avi", "mov"]; if (downloadExtensions.includes(fileExtension)) { gtag("event", "file_download", { event_category: "downloads", event_label: link.href, value: 1 }); } } }); '; } /** * Render admin page */ public function render_admin_page() { // Get current settings $analytics_id = get_option('google_analytics_id', ''); $gtm_id = get_option('google_tag_manager_id', ''); $site_verification = get_option('google_site_verification', ''); $adsense_id = get_option('adsense_publisher_id', ''); $business_id = get_option('google_my_business_id', ''); $enhanced_ecommerce = get_option('google_enhanced_ecommerce', 0); $track_outbound = get_option('google_track_outbound_links', 0); $track_downloads = get_option('google_track_downloads', 0); ?>

🐱 TigerStyle Whiskers Integration Active!
Analytics will automatically respect user privacy consent. Users must grant analytics consent before Google Analytics loads, ensuring GDPR compliance.



  1. Google Analytics and sign in', 'tigerstyle-heat'); ?>

  1. Google Search Console', 'tigerstyle-heat'); ?>

  1. Google Tag Manager', 'tigerstyle-heat'); ?>

  1. ' . home_url('/sitemap.xml') . ''); ?>