Mostrar conteúdo por IP do visitante no WordPress

Autor:Lisa Farrell·2026-06-01

Sites WordPress muitas vezes precisam mostrar conteúdos diferentes em posts, produtos ou landing pages conforme a região do visitante. O shortcode exibe conteúdo padrão e o navegador chama https://my.ipin.io/info .

Objetivo de projeto

Em “Mostrar conteúdo por IP do visitante no WordPress”, a página deve continuar útil antes do término da requisição de IP. O resultado geográfico é apenas um aprimoramento: ele é validado, aplicado a uma decisão limitada e descartado quando faltam campos.

Fluxo de requisição e decisão

Mostrar conteúdo por IP do visitante no WordPress: O fluxo abaixo foi criado para esta implementação específica e não reutiliza uma lista genérica de consulta de IP.

  1. Etapa 1 — Estado padrão: shortcode fallback HTML
  2. Etapa 2 — Requisição: wp_unique_id + static guard
  3. Etapa 3 — Validação: 2.5s timeout
  4. Etapa 4 — Decisão: sessionStorage
  5. Etapa 5 — Fallback: ipin:geo-content

Exemplo voltado à produção

Mostrar conteúdo por IP do visitante no WordPress: O exemplo inclui timeout, validação da resposta, fallback determinístico e tratamento do ciclo de vida específico do framework.

<?php
function ipin_geo_content_shortcode(): string {
    $id = wp_unique_id('ipin-geo-');
    $default = 'Support is available through our global help center.';
    return sprintf(
        '<aside id="%s" class="ipin-geo-note" data-default="%s">%s</aside>',
        esc_attr($id), esc_attr($default), esc_html($default)
    );
}
add_shortcode('geo_content', 'ipin_geo_content_shortcode');

function ipin_geo_content_assets(): void {
    wp_register_script('ipin-geo-content', '', [], null, true);
    wp_enqueue_script('ipin-geo-content');
    wp_add_inline_script('ipin-geo-content', <<<'JS'
(() => {
  if (window.__ipinGeoContentLoaded) return;
  window.__ipinGeoContentLoaded = true;
  const copy = {
    JP: 'Japan support: weekdays 09:00–18:00 JST.',
    DE: 'EU support: weekdays 09:00–17:00 CET.',
    US: 'US support: weekdays 09:00–17:00 ET.'
  };
  async function country() {
    const cached = sessionStorage.getItem('ipin_country');
    if (/^[A-Z]{2}$/.test(cached || '')) return cached;
    const controller = new AbortController();
    const timer = setTimeout(() => controller.abort(), 2500);
    try {
      const response = await fetch('https://my.ipin.io/info', {
        headers: {Accept: 'application/json'}, signal: controller.signal
      });
      if (!response.ok) throw new Error(`HTTP ${response.status}`);
      const data = await response.json();
      const value = String(data.country || '').toUpperCase();
      if (!/^[A-Z]{2}$/.test(value)) throw new Error('invalid country');
      sessionStorage.setItem('ipin_country', value);
      return value;
    } finally { clearTimeout(timer); }
  }
  country().then(value => {
    document.querySelectorAll('.ipin-geo-note').forEach(el => {
      el.textContent = copy[value] || el.dataset.default;
      el.dispatchEvent(new CustomEvent('ipin:geo-content', {
        bubbles: true, detail: {state: copy[value] ? 'resolved' : 'fallback'}
      }));
    });
  }).catch(() => {});
})();
JS);
}
add_action('wp_enqueue_scripts', 'ipin_geo_content_assets');

Matriz de testes

Antes de publicar “Mostrar conteúdo por IP do visitante no WordPress”, execute estes casos com respostas simuladas ou uma saída VPN controlada.

CondiçãoEntrada / configuraçãoResultado esperado
T1[geo_content] × 22 unique DOM id; fetch × 1
T2CSP blockdefault HTML
T3latency > 2500 msAbortController; fallback
T4sessionStorage=JPfetch × 0

Teste automatizado / smoke test

// Browser console smoke test after inserting [geo_content] twice:
const boxes = [...document.querySelectorAll('.ipin-geo-note')];
console.assert(boxes.length === 2);
console.assert(new Set(boxes.map(x => x.id)).size === 2);

Tratamento de falhas

Mostrar conteúdo por IP do visitante no WordPress: A falha deve aparecer nos logs ou nas ferramentas de desenvolvimento, mas não pode deixar um bloco vazio nem quebrar o checkout.

FalhaCausaResposta
CORSOrigin headerdefault HTML
script merged × 2cache pluginglobal loaded flag
country invalidschemaignore value
consent=falseanalytics eventUI state only

Caso prático

Um uso realista de “Mostrar conteúdo por IP do visitante no WordPress”: um site de documentação mostra horários locais de suporte por shortcode, mantendo o mesmo texto de ajuda completo e rastreável para todos.

Notas de produção

Mostrar conteúdo por IP do visitante no WordPress: Mantenha o HTML padrão completo. Localização por IP não comprova identidade e o resultado no navegador não deve controlar autorização.

Conclusão

“Mostrar conteúdo por IP do visitante no WordPress” agora possui caminho de implementação, testes e fallback próprios, em vez de compartilhar um modelo genérico.