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.
- Étape 1 — État par défaut:
shortcode fallback HTML - Étape 2 — Requête:
wp_unique_id + static guard - Étape 3 — Validation:
2.5s timeout - Étape 4 — Décision:
sessionStorage - É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.
| Condition | Entrée / configuration | Résultat attendu |
|---|---|---|
| T1 | [geo_content] × 2 | 2 unique DOM id; fetch × 1 |
| T2 | CSP block | default HTML |
| T3 | latency > 2500 ms | AbortController; fallback |
| T4 | sessionStorage=JP | fetch × 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.
| Échec | Cause | Réponse |
|---|---|---|
| CORS | Origin header | default HTML |
| script merged × 2 | cache plugin | global loaded flag |
| country invalid | schema | ignore value |
| consent=false | analytics event | UI 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.