settings = ATT_Consent::get_settings(); // Priority 1: consent defaults + attribution capture (must be first in
). add_action( 'wp_head', array( $this, 'output_consent_defaults' ), 1 ); // Priority 2: gtag.js or GTM (Advanced mode only). add_action( 'wp_head', array( $this, 'output_tracking_script' ), 2 ); // Footer: banner HTML. add_action( 'wp_footer', array( $this, 'output_banner_html' ), 5 ); // Enqueue banner assets. add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_assets' ) ); } /** * Output the inline consent defaults script. * This MUST run before any gtag/GTM scripts. */ public function output_consent_defaults() { $s = $this->settings; $config = array( 'consent_mode' => $s['consent_mode'], 'consent_expiry' => (int) $s['consent_expiry'], 'wait_for_update' => (int) $s['wait_for_update'], 'url_passthrough' => (bool) $s['url_passthrough'], 'ads_data_redaction' => (bool) $s['ads_data_redaction'], 'tracking_mode' => $s['tracking_mode'], ); // In basic mode, pass the tracking snippet for deferred injection. if ( 'basic' === $s['consent_mode'] ) { $config['tracking_snippet'] = $this->get_tracking_snippet(); } // Pass custom scripts for conditional injection. $config['scripts'] = ATT_Consent_Scripts_Manager::get_scripts_for_frontend(); $config_json = wp_json_encode( $config ); ?> settings; // In basic mode, tracking is deferred until consent. if ( 'basic' === $s['consent_mode'] ) { return; } echo $this->get_tracking_snippet(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- contains script tags. } /** * Get the tracking script snippet HTML. * * @return string */ private function get_tracking_snippet() { $s = $this->settings; if ( 'gtm' === $s['tracking_mode'] && ! empty( $s['gtm_container_id'] ) ) { $id = esc_attr( $s['gtm_container_id'] ); return " "; } if ( 'gtag' === $s['tracking_mode'] && ! empty( $s['ga4_measurement_id'] ) ) { $id = esc_attr( $s['ga4_measurement_id'] ); return " "; } return ''; } /** * Enqueue frontend assets. */ public function enqueue_assets() { wp_enqueue_style( 'att-consent-banner', ATT_CC_PLUGIN_URL . 'public/css/banner.css', array(), ATT_CC_VERSION ); wp_enqueue_script( 'att-consent-manager', ATT_CC_PLUGIN_URL . 'public/js/consent-manager.js', array(), ATT_CC_VERSION, true ); wp_enqueue_script( 'att-consent-banner', ATT_CC_PLUGIN_URL . 'public/js/banner.js', array( 'att-consent-manager' ), ATT_CC_VERSION, true ); } /** * Output the banner and preferences modal HTML. */ public function output_banner_html() { $s = $this->settings; do_action( 'att_consent_before_banner' ); $position_class = 'att-cc-position-' . esc_attr( $s['banner_position'] ); $style_vars = sprintf( '--att-cc-bg:%s;--att-cc-text:%s;--att-cc-accept-bg:%s;--att-cc-accept-text:%s;--att-cc-reject-bg:%s;--att-cc-reject-text:%s;--att-cc-pref-bg:%s;--att-cc-pref-text:%s;', esc_attr( $s['banner_bg_color'] ), esc_attr( $s['banner_text_color'] ), esc_attr( $s['btn_accept_bg'] ), esc_attr( $s['btn_accept_text'] ), esc_attr( $s['btn_reject_bg'] ), esc_attr( $s['btn_reject_text'] ), esc_attr( $s['btn_preferences_bg'] ), esc_attr( $s['btn_preferences_text'] ) ); $banner_html = ''; $modal_html = ''; $html = apply_filters( 'att_consent_banner_html', $banner_html . $modal_html, $s ); echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- escaped above. do_action( 'att_consent_after_banner' ); } }