before any tags load
add_action('wp_head', [$this, 'outputGcmV2Header'], 1);
add_action('wp_footer', [$this, 'outputCmpBridgeScript'], 95);
}
/**
* Outputs the shared consent helper.
*/
public function outputConsentHelper(): void {
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Static inline script
echo $this->renderConsentHelper();
}
/**
* Renders window.wpZbridgeConsent, which passes consent to Zaraz:
* Google Consent Mode v2 via zaraz.set(), and Zaraz consent purposes via zaraz.consent.set().
*
* @return string
*/
public function renderConsentHelper(): string {
$purposes = wp_json_encode([
'analytics' => self::PURPOSE_ANALYTICS,
'marketing' => self::PURPOSE_MARKETING,
]);
ob_start();
?>
renderGcmV2Script();
}
/**
* Generates GCM v2 script tag.
*
* @return string
*/
public function renderGcmV2Script(): string {
$adStorage = (Options::get('gcm_ad_storage_default', 'denied') === 'granted') ? 'granted' : 'denied';
$analyticsStorage = (Options::get('gcm_analytics_default', 'denied') === 'granted') ? 'granted' : 'denied';
$defaults = [
'ad_storage' => $adStorage,
'analytics_storage' => $analyticsStorage,
'ad_user_data' => $adStorage,
'ad_personalization' => $adStorage,
'wait_for_update' => 500,
];
$encodedDefaults = wp_json_encode($defaults);
unset($defaults['wait_for_update']);
$zarazDefaults = wp_json_encode($defaults);
$out = "\n";
return $out;
}
/**
* Injects bridge script listening to 3rd-party CMP events (Complianz, Cookiebot, CookieYes, Borlabs Cookie, WP Consent API).
*/
public function outputCmpBridgeScript(): void {
?>