Los sitios WordPress suelen necesitar contenidos distintos en entradas, productos o landing pages según la región del visitante. Un shortcode puede mostrar contenido predeterminado y llamar https://my.ipin.io/info desde el navegador.
Objetivo de diseño
En «Mostrar contenido por IP del visitante en WordPress», la página debe seguir siendo útil antes de que termine la solicitud IP. El resultado geográfico es una mejora: se valida, se aplica a una decisión limitada y se descarta cuando faltan datos.
Flujo de solicitud y decisión
Mostrar contenido por IP del visitante en WordPress: El flujo siguiente pertenece a esta implementación concreta y no reutiliza una lista genérica de consulta IP.
- Paso 1 — Estado predeterminado:
shortcode fallback HTML - Paso 2 — Solicitud:
wp_unique_id + static guard - Paso 3 — Validación:
2.5s timeout - Paso 4 — Decisión:
sessionStorage - Paso 5 — Reserva:
ipin:geo-content
Ejemplo orientado a producción
Mostrar contenido por IP del visitante en WordPress: El ejemplo incorpora tiempo de espera, validación de respuesta, un valor de reserva determinista y manejo específico del ciclo de vida del 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 pruebas
Antes de publicar «Mostrar contenido por IP del visitante en WordPress», ejecute estos casos con respuestas simuladas o una salida VPN controlada.
| Condición | Entrada / configuración | Resultado esperado |
|---|---|---|
| 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 |
Prueba automatizada / 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);
Gestión de fallos
Mostrar contenido por IP del visitante en WordPress: Los fallos deben verse en registros o herramientas de desarrollo, pero nunca dejar un bloque vacío ni romper el proceso de pago.
| Fallo | Causa | Respuesta |
|---|---|---|
| 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 |
Caso práctico
Un uso realista de «Mostrar contenido por IP del visitante en WordPress»: un sitio de documentación muestra horarios locales de soporte mediante shortcode y conserva el mismo texto de ayuda completo e indexable.
Notas de producción
Mostrar contenido por IP del visitante en WordPress: Mantenga completo el HTML predeterminado. La ubicación IP no demuestra identidad y el resultado del navegador no debe controlar permisos.
Conclusión
«Mostrar contenido por IP del visitante en WordPress» ahora tiene una ruta de implementación, pruebas y comportamiento de reserva propios, en lugar de una plantilla compartida.