Afficher du contenu par IP visiteur dans WordPress

Auteur:Lisa Farrell·2026-06-01

Les sites WordPress doivent souvent afficher des contenus différents dans les articles, pages produit ou landing pages selon la région du visiteur. Un shortcode peut afficher un contenu par défaut puis appeler https://my.ipin.io/info dans le navigateur.

Objectif de conception

Pour « Afficher du contenu par IP visiteur dans WordPress », la page doit rester utile avant la fin de la requête IP. Le résultat géographique n’est qu’un enrichissement : il est validé, limité à une décision précise et ignoré si les données sont incomplètes.

Flux de requête et de décision

Afficher du contenu par IP visiteur dans WordPress: Le flux ci-dessous est propre à cette implémentation et ne reprend pas une liste générique de contrôle IP.

  1. Étape 1 — État par défaut: shortcode fallback HTML
  2. Étape 2 — Requête: wp_unique_id + static guard
  3. Étape 3 — Validation: 2.5s timeout
  4. Étape 4 — Décision: sessionStorage
  5. Étape 5 — Repli: ipin:geo-content

Exemple orienté production

Afficher du contenu par IP visiteur dans WordPress: L’exemple ajoute un délai maximal, la validation de la réponse, un repli déterministe et une gestion adaptée au cycle de vie du 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');

Matrice de tests

Avant de publier « Afficher du contenu par IP visiteur dans WordPress », exécutez ces cas avec des réponses simulées ou une sortie VPN contrôlée.

ConditionEntrée / configurationRésultat attendu
T1[geo_content] × 22 unique DOM id; fetch × 1
T2CSP blockdefault HTML
T3latency > 2500 msAbortController; fallback
T4sessionStorage=JPfetch × 0

Test automatisé / 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);

Gestion des échecs

Afficher du contenu par IP visiteur dans WordPress: Une erreur doit être visible dans les journaux ou les outils de développement, sans laisser un bloc vide ni casser le paiement.

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

Cas pratique

Un usage réaliste de « Afficher du contenu par IP visiteur dans WordPress » : un site de documentation affiche les horaires du support local via un shortcode tout en conservant le même texte d’aide complet et indexable.

Notes de mise en production

Afficher du contenu par IP visiteur dans WordPress: Conservez un HTML par défaut complet. La localisation IP ne prouve pas l’identité et ne doit pas servir de contrôle d’autorisation côté client.

Conclusion

« Afficher du contenu par IP visiteur dans WordPress » dispose désormais de son propre parcours d’implémentation, de tests concrets et d’un comportement de repli défini.