O Google Ads acusa falta de sinal de consentimento, o GA4 avisa que o Consent Mode não está configurado e o banner de cookies está lá, funcionando. O problema é ordem de carregamento: o gtag.js subiu e mediu antes de o banner existir na página. O comando default tem que ser a primeira coisa do head.
Prioridade 1 no wp_head
add_action('wp_head', function () {
echo '<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag("consent", "default", {
ad_storage: "denied",
ad_user_data: "denied",
ad_personalization: "denied",
analytics_storage: "denied",
wait_for_update: 500
});
if (localStorage.getItem("rt_consent") === "granted") {
gtag("consent", "update", {
ad_storage: "granted",
ad_user_data: "granted",
ad_personalization: "granted",
analytics_storage: "granted"
});
}
</script>';
}, 1);A prioridade 1 é o pulo do gato. Plugin de GA4 e container do GTM se penduram no wp_head com a prioridade padrão 10, então qualquer número menor garante que o default chegue antes. O wait_for_update: 500 dá meio segundo para o banner responder antes de o gtag mandar o ping sem cookie.
O update no clique do banner
document.addEventListener('DOMContentLoaded', function () {
var botao = document.getElementById('aceitar-cookies');
if (!botao) { return; }
botao.addEventListener('click', function () {
localStorage.setItem('rt_consent', 'granted');
gtag('consent', 'update', {
ad_storage: 'granted',
ad_user_data: 'granted',
ad_personalization: 'granted',
analytics_storage: 'granted'
});
});
});Três armadilhas me custaram tempo aqui. O update precisa usar a mesma função gtag declarada no default, empurrando para o mesmo dataLayer: se o plugin de cookies cria um dataLayer próprio, o update cai no vazio. ad_user_data e ad_personalization são campos que a v2 trouxe, e mandar só ad_storage e analytics_storage bastava na v1, hoje não basta. E sem guardar a escolha, o granted morre na próxima página — por isso o default relê o localStorage.
Para conferir, abra o Tag Assistant e olhe o status de cada chave antes e depois do clique. Se já aparecer concedido no primeiro carregamento de quem nunca clicou, tem outro ponto do tema injetando consentimento.
Se travou nisso e precisa de ajuda, me chama aqui.