WPCS - WordPress Currency Switcher Professional

El selector de monedas de WordPress no convierte los precios: causas

El selector está en la página, un visitante elige euros y los precios siguen en dólares. O se convierten en 0.00, desaparecen, o el propio shortcode aparece como texto. Cuando el selector de monedas de WordPress no convierte los precios, la causa casi siempre está en una lista corta, y una página de prueba de dos líneas te dice qué parte de la lista revisar. Esta guía trata de WPCS – WordPress Currency Switcher, el plugin para precios en entradas, páginas y contenido personalizado.

Empieza con una página de prueba de dos líneas

Crea una página en borrador que contenga solo estos dos shortcodes:

[wpcs]
[wpcs_price value=100]

Abre la vista previa en una ventana privada del navegador, donde no has iniciado sesión, y elige cada moneda en el selector. El resultado divide el problema en dos: la configuración del plugin o el lugar donde se imprimen tus precios reales.

Lo que ves en la página de pruebaDónde mirar
100 se convierte correctamente en todas las monedasEl plugin funciona. Tus precios reales no los imprime el shortcode o están mal escritos: las dos secciones siguientes
0.00 en una o más monedasEl tipo de cambio de esa moneda es 0 o está vacío
La página se recarga pero el importe sigue igualCaché de página o almacenamiento de la moneda
Elegir una moneda no hace nadaUn problema de JavaScript en la página
[wpcs_price value=100] se imprime como textoWPCS no está activo en este sitio
La prueba funciona, pero los precios de los productos de WooCommerce nunca cambianEl plugin equivocado para una tienda

El precio no lo imprime [wpcs_price]

Esta es la causa más frecuente. WPCS no busca importes en tus páginas. Solo convierte lo que imprime su shortcode [wpcs_price] (o su API de PHP). Un precio escrito como texto simple, como «Nuestras tarifas empiezan en $20», un campo de precio del tema, un widget de tabla de precios o una celda de un plugin de tablas se queda exactamente como está escrito, sea cual sea la moneda seleccionada. Sustituye cada uno de esos importes por el shortcode, escrito en tu moneda base:

Our rates start at [wpcs_price value=20] per hour.

Si el tema imprime el precio desde su propio campo en una plantilla, cambia la plantilla en un tema hijo por echo do_shortcode('[wpcs_price meta_value="price"]');, donde price es el nombre del campo personalizado. La referencia de [wpcs_price] enumera todos los atributos.

El campo no ejecuta shortcodes

Si el shortcode funciona en la página de prueba pero aparece como texto en tu diseño, el campo en el que está imprime su contenido como texto simple. Ejemplos típicos son los widgets de encabezado y de botón, los widgets de tabla de precios, las celdas de plugins de tablas, los campos de opciones del tema y las etiquetas dinámicas que muestran un campo personalizado. Mueve el precio a un elemento de texto o de shortcode, o imprímelo desde una plantilla. Si un elemento de terceros debe contener el precio, su autor tiene que pasar ese campo por do_shortcode() de WordPress; pídeselo.

Un shortcode dentro de otro shortcode

[wpcs_price value="[acf field=price]"] nunca funciona: WordPress no ejecuta shortcodes dentro de los atributos de un shortcode, así que value recibe el texto literal. Deja que WPCS lea el campo por sí mismo con [wpcs_price meta_value=price]; los campos simples de ACF se guardan con el nombre del campo. Para las filas de un repetidor de ACF, imprime el precio en la plantilla:

<?php
// Child theme template: ACF repeater "plans" with the sub field "price".
if (have_rows('plans')) {
    while (have_rows('plans')) {
        the_row();
        echo do_shortcode('[wpcs_price value="' . floatval(get_sub_field('price')) . '"]');
    }
}

El precio se ha convertido en un enlace

WPCS imprime el precio como un simple <span class="wpcs_price"> sin ningún enlace. Si el precio aparece subrayado o se puede pulsar, el editor de páginas envolvió el shortcode en un enlace al insertarlo; Thrive Architect lo hace, por ejemplo. Elimina el elemento e inserta de nuevo el shortcode como texto simple; después revisa el HTML del elemento.

El shortcode está mal escrito

Un shortcode con una pequeña errata no imprime nada, imprime 0.00 o se muestra como texto. Comprueba estos puntos:

  • Espacios. Un espacio después del nombre del shortcode y entre los atributos: [wpcs_price type="fixed" value="USD:20,ZAR:350"]. Sin el primer espacio, [wpcs_pricetype="fixed" ...] es un shortcode distinto y desconocido.
  • Comillas rectas. El texto copiado de un procesador de textos, un documento o un chat suele contener comillas tipográficas (” “). WordPress las trata como parte del valor, así que type deja de ser fixed y value deja de ser un número, lo que da 0.00. Vuelve a escribir las comillas en la vista de código o de texto del editor, o prescinde de ellas en valores sueltos: value=100.
  • Un número simple. value es un importe en la moneda base con punto para los decimales: 1500 o 1500.50. PHP lee el número hasta el primer carácter que no entiende, así que 1,500 se lee como 1, 1.500,00 como 1.5 y $1500 como 0.
  • Valor vacío. value=0, un value vacío o un campo personalizado vacío no imprime nada en absoluto. Con meta_value, comprueba la clave meta exacta y añade post_id=123 cuando el campo pertenezca a otra entrada.
  • Precios fijos. Con type="fixed", enumera todas las monedas del sitio como pares CODE:amount separados por comas. Una moneda que falte en la lista muestra none.

El tipo de cambio es 0 o está vacío

Un precio convertido es el importe base multiplicado por el tipo de cambio de la moneda seleccionada, así que un tipo de cambio de 0 muestra todos los precios como 0.00. Una fila de moneda nueva empieza con el tipo de cambio 0 hasta que obtienes o escribes uno. Cuando la obtención falla, por ejemplo porque el código no es un código ISO 4217 válido o porque el agregador necesita una clave de API que no has introducido, el campo del tipo de cambio recibe un texto de error como There is no data for these currencies en lugar de un número, y al guardar la página ese tipo de cambio se almacena como 0.

  1. Abre Ajustes → Currency Switcher, pestaña Monedas (Currencies), y mira el tipo de cambio de cada moneda. La moneda base (el botón de opción seleccionado) tiene el tipo de cambio 1.
  2. Pulsa Actualizar todos los tipos de cambio (Update all rates), o el botón de actualización junto a un solo tipo de cambio, o escribe el tipo de cambio a mano. Si el campo muestra un mensaje en lugar de un número, revisa el código y el Agregador de monedas (Currency aggregator) y la Clave de API del agregador (Aggregator API key) en la pestaña Opciones (Options); cada mensaje se explica en el error «no data for» currency del selector de monedas, y los problemas con el código en por qué no funciona la actualización automática de los tipos de cambio.
  3. Pulsa Guardar cambios (Save options) y vacía la caché de página.

Si los precios muestran 0.00 un instante y luego el importe correcto, la página procede de una caché creada cuando un tipo de cambio aún era 0, y Uso un plugin de caché en mi sitio (I am using cache plugin on my site) vuelve a dibujar los precios tras la carga. Corrige los tipos de cambio y vacía todas las cachés.

La página no sigue al selector: caché, almacenamiento, JavaScript

Cuando un visitante elige una moneda, la página se recarga con ?currency=EUR en la dirección, el plugin guarda la elección en el almacenamiento definido en Almacenamiento de la moneda (Currency storage) y todas las páginas siguientes se construyen con precios en esa moneda. Tres cosas rompen esta cadena.

  • Caché de página. Una página en caché contiene los precios en la moneda con la que se guardó en caché, así que la página siguiente muestra la moneda antigua. En la pestaña Opciones (Options), establece Uso un plugin de caché en mi sitio (I am using cache plugin on my site) en Sí (Yes) y vacía todas las cachés: la del plugin, la del servidor y la de la CDN. El navegador envía entonces una solicitud a admin-ajax.php (acción wpcs_get_prices_html) tras cargar la página y vuelve a dibujar cada [wpcs_price] en la moneda del visitante. Una señal típica de esta causa: todo funciona mientras tienes la sesión iniciada, porque las cachés omiten a los administradores.
  • Almacenamiento de la moneda. Si la moneda vuelve a la moneda de bienvenida o a la de GeoIP justo después de cambiarla, el almacenamiento elegido no conserva el valor en tu servidor. Las sesiones suelen ser la causa: establece Almacenamiento de la moneda (Currency storage) en transient, el valor predeterminado.
  • JavaScript. El menú desplegable funciona con JavaScript. Si elegir una moneda no hace nada, abre la consola del navegador (F12) y recarga: un error de otro script, o un plugin de optimización que retrasa, difiere o combina scripts, detiene el selector. Corrige el error, o excluye /wp-content/plugins/currency-switcher/js/ y jQuery de esas funciones; después vacía las cachés.

Las exclusiones específicas de cada plugin y las cachés de servidor que no se pueden desactivar se tratan en el selector de monedas no funciona con un plugin de caché.

Los precios de los productos de WooCommerce no cambian: el plugin equivocado

WPCS nunca cambia los precios de los productos de WooCommerce, el carrito ni el checkout. Es así por diseño, no por un fallo: solo convierte los precios del contenido. Una tienda necesita el plugin hermano FOX – WooCommerce Currency Switcher. Si tienes la descarga de FOX, asegúrate de haber instalado el archivo del plugin principal y no el archivo adicional de WPCS que viene con él en una carpeta aparte. Las diferencias se explican en WordPress Currency Switcher frente a WooCommerce Currency Switcher.

Lista de comprobación

  • La página de prueba con [wpcs] y [wpcs_price value=100] convierte en una ventana privada.
  • Cada precio que debe cambiar lo imprime [wpcs_price], en un campo que ejecuta shortcodes, y no anidado en otro shortcode.
  • Espacios entre los atributos, comillas rectas, números simples en la moneda base.
  • Ninguna moneda tiene el tipo de cambio 0 ni un tipo de cambio vacío.
  • Con una caché de página: Uso un plugin de caché en mi sitio (I am using cache plugin on my site) está en Sí (Yes) y todas las cachés están vaciadas.
  • Sin errores de JavaScript en la consola.

Si todos los puntos están en orden y un precio sigue sin convertirse, abre un tema en el foro de soporte de WPCS con un enlace a la página y el shortcode exacto tal como lo escribiste.