WPCS - WordPress Currency Switcher Professional

Moneda según el país del visitante en WordPress con reglas GeoIP

Para establecer la moneda según el país del visitante en WordPress, WPCS – WordPress Currency Switcher usa reglas GeoIP: asignas países a cada moneda y un visitante nuevo ve los precios en la moneda de su país sin tocar el selector. La configuración lleva unos minutos. Lo que más sorprende a los propietarios de sitios es cuándo se aplican las reglas: solo en la primera visita, y nunca contra una moneda que el visitante haya elegido. A continuación encontrarás la configuración, la moneda de bienvenida, las dos bibliotecas de geolocalización, cómo desactivar la función o ampliarla, y qué ven los motores de búsqueda.

Cómo se elige la moneda según el país

En la primera visita a una página, el plugin hace cuatro cosas:

  1. Establece la Moneda de bienvenida (Welcome currency) como moneda del visitante.
  2. Averigua el país del visitante a partir de su dirección IP, con la biblioteca seleccionada en Posición geográfica (Geo position).
  3. Recorre tus monedas por orden y toma la primera cuya regla GeoIP contiene ese país.
  4. Guarda el resultado en el Almacenamiento de moneda (Currency storage) del visitante.

En cada visita posterior a una página, el plugin usa la moneda guardada y no vuelve a mirar las reglas. Una moneda que el visitante elige en el selector sustituye a la guardada y se mantiene. En esa primera visita, una regla que coincide también tiene prioridad sobre una moneda indicada en el enlace, así que un visitante del Reino Unido que llega a través de ?currency=EUR sigue obteniendo la moneda de la regla del Reino Unido.

"Primera visita" significa que el almacenamiento aún no tiene ningún registro del visitante. Con el almacenamiento transient predeterminado, el registro pertenece a la dirección IP y caduca un día después de la última visita a una página; con cookie dura un día desde la primera visita; con session termina con la sesión PHP. Cuando el registro caduca, la siguiente visita a una página vuelve a ser una primera visita y las reglas se ejecutan de nuevo.

GeoIP solo elige la moneda. Los precios siguen necesitando imprimirse con [wpcs_price] para convertirse; si eso aún no está configurado, empieza por cómo mostrar precios en varias monedas en WordPress.

Configura las reglas GeoIP

  1. Abre Ajustes → Currency Switcher (Settings → Currency Switcher). En la pestaña Monedas (Currencies), añade todas las monedas que quieras mostrar y comprueba que cada una tenga tipo de cambio (consulta cómo añadir una nueva moneda).
  2. Abre la pestaña Reglas GeoIP (GeoIP rules). Cada moneda tiene su propio campo, Elige un país... (Choose a country...). Haz clic en él, escribe el nombre de un país y selecciónalo. Añade tantos países como necesites.
  3. Pulsa Guardar opciones (Save options).

Tres reglas prácticas:

  • Solo países. No hay entradas para regiones ni continentes. Para mostrar euros en toda la Eurozona, añade cada país del euro a la regla de EUR; para mostrar dólares en todo el continente americano, añade cada país de América a la regla de USD.
  • Una regla por país. Si un país está en dos reglas, gana la moneda que aparece más arriba en la lista.
  • Deja el resto vacío. Los países que no están en ninguna regla obtienen la moneda de bienvenida, así que no hace falta enumerar todo el mundo.

Un ejemplo para un sitio con la moneda base USD:

MonedaPaíses de su regla
EURAlemania, Francia, Italia, España, los Países Bajos y el resto de los países del euro
GBPReino Unido
CADCanadá
USDNinguno: todos los demás países obtienen la moneda de bienvenida, USD

La parte inferior de la pestaña Reglas GeoIP (GeoIP rules) muestra el país detectado para tu propia conexión, una forma rápida de comprobar que la detección funciona en tu servidor.

Moneda de bienvenida, moneda base y una sola moneda para todos

Es fácil confundir los dos ajustes:

  • La moneda base es la que tiene el botón de opción seleccionado en la pestaña Monedas (Currencies). Su tipo de cambio es 1, y cada importe de [wpcs_price] se escribe en ella. No decide lo que ven los visitantes.
  • La moneda de bienvenida, que se define en Moneda de bienvenida (Welcome currency), en la pestaña Opciones (Options), es la que ve un visitante nuevo cuando ninguna regla GeoIP coincide con su país. Revísala después de añadir monedas, porque puede ser cualquier moneda de la lista, no solo la base.

Así, un sitio puede mantener sus precios en INR y saludar a los visitantes en USD. Para mostrar GBP al Reino Unido y USD a todos los demás, establece Moneda de bienvenida (Welcome currency) en USD y añade Reino Unido a la regla de GBP; no hace falta nada más. Para mostrar una sola moneda a todos, borra todas las reglas GeoIP y establece esa moneda como moneda de bienvenida; si los visitantes no deben poder cambiarla, no coloques un selector en el sitio.

Un cambio en la moneda de bienvenida o en las reglas afecta a los visitantes nuevos. Los visitantes que el plugin ya recuerda conservan su moneda guardada hasta que caduque su registro.

Elige la biblioteca de geolocalización

La opción Posición geográfica (Geo position) de la pestaña Opciones (Options) decide cómo se averigua el país:

  • Open Geo IP (predeterminada) usa el archivo de base de datos de países que incluye el plugin. No hay nada que configurar, pero el archivo está tan actualizado como la versión del plugin y solo admite direcciones IPv4. Si el sitio está detrás de Cloudflare con IP Geolocation activada, toma el país de la cabecera CF-IPCountry de Cloudflare.
  • GeoIP2 (MaxMind API key is required) usa la base de datos GeoLite2 de MaxMind, que está más actualizada y admite también IPv6. Crea una cuenta gratuita de GeoLite2 en MaxMind y genera una clave de licencia. Selecciona GeoIP2, pega la clave en Clave de licencia de MaxMind (MaxMind license key), pulsa Guardar opciones (Save options) y luego Actualizar/Descargar BD (Update/Download DB). El archivo se guarda como wp-content/uploads/currency-switcher/GeoLite2-Country.mmdb. No se actualiza automáticamente, así que vuelve a pulsar el botón cada pocos meses. Mientras el archivo no exista, no se detecta ningún país y todos los visitantes obtienen la moneda de bienvenida.

Si el país detectado es incorrecto, está vacío o es el mismo para todos, la causa suele ser la dirección IP que tu servidor pasa a PHP. Esto se explica en la detección de moneda GeoIP no funciona.

Desactiva GeoIP o cambia su comportamiento

Desactivarlo

Quita todos los países de todas las reglas en la pestaña Reglas GeoIP (GeoIP rules) y pulsa Guardar opciones (Save options). Entonces cada visitante nuevo empieza con la moneda de bienvenida.

Conservar las reglas y detener el cambio automático

El filtro wpcs_geo_position recibe el código del país detectado antes de que se comprueben las reglas. Devuelve un valor vacío y ninguna regla coincidirá nunca, mientras las reglas siguen guardadas en los ajustes. No edites los archivos del plugin para esto: los cambios se pierden con la siguiente actualización.

/*
 * WPCS: keep the GeoIP rules saved but never switch the currency by country.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter('wpcs_geo_position', '__return_empty_string');

El mismo filtro puede proporcionar el país desde otra fuente, por ejemplo la cabecera de Cloudflare cuando usas GeoIP2; el artículo de solución de problemas citado arriba incluye ese fragmento.

Aplicar las reglas en cada nueva sesión del navegador

A veces el país debe imponerse en cada visita nueva, no solo en la primera, mientras que una moneda elegida en el selector sigue vigente durante la visita. Esto requiere unas pocas líneas de código. El fragmento siguiente trata cada sesión del navegador como una primera visita: vuelve a aplicar las reglas, o la moneda de bienvenida para los países sin regla, en la primera visita a una página después de abrir el navegador.

/*
 * WPCS: apply the GeoIP rules at the start of every browser session.
 * A currency picked in the switcher still wins until the browser is closed.
 * Child theme functions.php or a code snippets plugin.
 */
add_action('template_redirect', function () {
    global $WPCS;
    if (empty($WPCS) || isset($_COOKIE['wpcs_geo_session'])) {
        return;
    }
    // A cookie without expiry date lives until the browser is closed.
    setcookie('wpcs_geo_session', '1', 0, COOKIEPATH, COOKIE_DOMAIN);

    if (isset($_GET['currency'])) {
        return; // the visitor arrived with a currency in the link
    }

    $country  = (string) $WPCS->storage->get_val('wpcs_user_country');
    $currency = $WPCS->get_currency_by_country($country);
    if (!$currency) {
        $currency = $WPCS->get_welcome_currency();
    }
    $WPCS->storage->set_val('wpcs_current_currency', $currency);
    $WPCS->current_currency = $currency;
});

El fragmento se ejecuta solo cuando WordPress genera la página. Las páginas servidas desde una caché de página lo omiten, así que úsalo en sitios sin caché de página completa o excluye de la caché las páginas de entrada.

Qué ven los motores de búsqueda

El plugin no trata de forma especial a los rastreadores. Un bot de un motor de búsqueda es un visitante como cualquier otro: en su primera solicitud obtiene la moneda de la regla GeoIP de su país, o la moneda de bienvenida. Google rastrea sobre todo desde direcciones de Estados Unidos, así que si Estados Unidos está en una regla, tus páginas se indexan con esa moneda; si no, se indexan con la moneda de bienvenida. Los rastreadores ubicados en otros países pasan por las mismas reglas. Cada moneda se muestra bajo la misma URL, de modo que cada página se indexa en una sola moneda. Para controlar cuál, elige la moneda de bienvenida y la moneda de la regla de Estados Unidos pensando en los resultados de búsqueda.

Comprueba que funciona

Crea una página en borrador con tres shortcodes:

[wpcs_check_country]
[wpcs_price value=100]
[wpcs]

[wpcs_check_country] imprime el país que la biblioteca detecta para el visitante actual, antes del filtro wpcs_geo_position, y el precio muestra qué moneda está activa. Cada prueba debe ser una primera visita real: una ventana privada nueva con almacenamiento cookie o session, una conexión distinta con almacenamiento transient. Una copia de desarrollo en tu propio ordenador, donde PHP ve la dirección de loopback, siempre informa de una dirección de prueba en Estados Unidos. Si el sitio usa una caché de página, establece Uso un plugin de caché en mi sitio (I am using cache plugin on my site) en Sí (Yes) en la pestaña Opciones (Options) y vacía la caché; de lo contrario, la página de un visitante se sirve a todos.

  • Las reglas contienen países, no regiones, y cada país está en una sola regla.
  • La moneda de bienvenida es la moneda de todos los países sin regla.
  • Con GeoIP2, la clave está guardada y el archivo de la base de datos se descargó.
  • La prueba fue una primera visita para el Almacenamiento de moneda (Currency storage) seleccionado.

Si la página de prueba muestra el país correcto y la moneda sigue sin respetar las reglas, abre un tema en el foro de soporte de WPCS con un enlace a la página de prueba y tus ajustes de Posición geográfica (Geo position) y Almacenamiento de moneda (Currency storage).