Error «no data for» en el selector de monedas: solución a los tipos de cambio
Cuando el selector de monedas muestra no data for una moneda (no data for EUR, no data for CAD) después de pulsar Actualizar todos los tipos de cambio (Update all rates), el plugin está transmitiendo la respuesta del servicio de tipos de cambio al que consultó. El servicio no tenía un tipo de cambio para ese par, rechazó la solicitud o nunca respondió. Lo mismo vale para los demás mensajes que pueden aparecer en los campos de tipo de cambio. A continuación verás de dónde obtiene WPCS sus tipos de cambio, qué significa cada mensaje, por qué los precios pueden caer a 0 tras una actualización y cómo mantener las actualizaciones automáticas dentro de los límites de tu API.
De dónde proceden los tipos de cambio
Los tipos de cambio se obtienen del servicio seleccionado en Ajustes → Currency Switcher → Opciones (Options) → Agregador de monedas (Currency aggregator). La moneda base es aquella cuyo botón de opción está seleccionado en la pestaña Monedas (Currencies): tiene el tipo de cambio 1, y cada solicitud pide al servicio el tipo de cambio de la moneda base a otra moneda. Una actualización envía una solicitud por cada moneda, además de la base.
| Agregador | Necesita una clave en Clave de API del agregador (Aggregator API key) |
|---|---|
| Currencyapi, Open exchange rates, Currencylayer, Fixer | Sí |
| finance.yahoo.com, CryptoCompare | No |
| El Banco Central Europeo (www.ecb.europa.eu), PrivatBank y los bancos nacionales de Ucrania, Polonia, Moldavia, Rumanía, Hungría y Rusia | No; cada uno publica una lista fija de monedas frente a su propia moneda |
Los tipos de cambio se actualizan de tres maneras: el botón Actualizar todos los tipos de cambio (Update all rates) sobre la lista de monedas, el pequeño botón de actualización junto a cada campo de tipo de cambio y la opción Actualización automática de tipos de cambio (Rate auto update), que se ejecuta mediante WP-Cron. Los dos botones solo rellenan los campos de tipo de cambio (rate); no se almacena nada hasta que haces clic en Guardar cambios (Save options).
Qué significa cada mensaje del tipo de cambio
Cuando el servicio no devuelve un número, el plugin escribe su mensaje en el campo de tipo de cambio (rate) en su lugar:
| Mensaje en el campo del tipo de cambio | Significado |
|---|---|
| no data for XXX | La respuesta no contenía ningún tipo de cambio para XXX: el código no es un código de moneda válido, la fuente no publica esa moneda o no llegó ninguna respuesta utilizable |
| There is no data for these currencies: USD/XXX | Lo mismo, procedente de finance.yahoo.com |
| Invalid API key or no data for these currencies: USD/XXX | Currencyapi rechazó la clave o no tiene ese par |
| This aggregator requires a license code | El agregador seleccionado necesita una clave y Clave de API del agregador (Aggregator API key) está vacía |
| Aggregator Error: seguido de un texto | El servicio rechazó la solicitud; el texto tras los dos puntos es su propia explicación |
El selector de monedas muestra «no data for» una moneda: revisa el código, la fuente y la conexión
- El código de la moneda. Los tipos de cambio se solicitan por el código del campo de nombre de la moneda, por lo que debe ser el código ISO 4217 de tres letras:
EUR, noEuroni€. La FAQ por qué no funciona la actualización automática de los tipos de cambio enlaza la lista de códigos válidos. - La cobertura de la fuente. El Banco Central Europeo publica unas 30 monedas frente al euro, y cada banco nacional publica su propia lista frente a su propia moneda. Una moneda que falta en esa lista siempre devuelve no data, sea cual sea la moneda base. Las criptomonedas como BTC requieren CryptoCompare, una fuente hecha para ellas.
- La conexión. El plugin no distingue una respuesta vacía de la ausencia de respuesta. Si todas las monedas fallan, prueba con otro agregador y pulsa Actualizar todos los tipos de cambio (Update all rates). Si todas las fuentes fallan para todas las monedas, tu servidor no puede acceder a servicios externos: un cortafuegos que bloquea las solicitudes salientes, un problema de DNS o de SSL, o una caída temporal. La pantalla Salud del sitio (Site Health) de Herramientas indica cuándo WordPress no puede conectar con WordPress.org, señal de que las solicitudes salientes están bloqueadas; el hosting puede abrirlas.
En la mayoría de los casos la solución más rápida es otro agregador. Solemos recomendar Currencyapi: crea una clave gratuita en su sitio, selecciónalo en Agregador de monedas (Currency aggregator), pega la clave en Clave de API del agregador (Aggregator API key), haz clic en Guardar cambios (Save options), después en Actualizar todos los tipos de cambio (Update all rates) y de nuevo en Guardar cambios (Save options).
«This aggregator requires a license code» y «Aggregator Error»
Currencyapi, Open exchange rates, Currencylayer y Fixer solo funcionan con una clave de su propio sitio, introducida en Clave de API del agregador (Aggregator API key). El campo contiene una sola clave, por lo que debe pertenecer al agregador seleccionado en ese momento; una clave de Fixer no funciona con Currencyapi.
Con una clave, el servicio aún puede rechazar la solicitud, y el motivo sigue a Aggregator Error:. Los tres habituales:
- Clave no válida. Cópiala de nuevo desde el panel del servicio, sin espacios.
- El plan no admite tu moneda base. Los planes gratuitos de varios servicios funcionan con una única moneda base: el de Fixer con EUR, los de Open Exchange Rates y Currencylayer con USD. Si tu moneda base es otra, todas las solicitudes fallan. Consulta las condiciones actuales de tu plan, o elige un agregador cuyo plan acepte tu moneda base.
- La cuota mensual está agotada. Consulta la última sección.
Los precios pasaron a 0 tras actualizar los tipos de cambio
Esto ocurre cuando un mensaje de error estaba en un campo de tipo de cambio (rate) y se guardaron los ajustes. El campo se almacena como un número, un mensaje se convierte en 0, y todos los precios en esa moneda se convierten en 0. Los tipos de cambio no se almacenan hasta que guardas, por lo que:
- Si todavía no has guardado, recarga la página de ajustes sin guardar y los tipos de cambio anteriores vuelven.
- Si ya has guardado, escribe el tipo de cambio correcto en cada campo afectado, o corrige el agregador y actualiza de nuevo; después guarda.
- La alerta Request error! Try later or another agregator! significa que no se pudo leer la respuesta a la solicitud de actualización, normalmente porque se imprimió en ella una advertencia o un error de PHP. No se cambió ningún tipo de cambio; inténtalo de nuevo o cambia de agregador y, si se repite, mira el registro de errores de PHP.
Las actualizaciones automáticas nunca almacenan 0: cuando la fuente no devuelve nada para una moneda, la tarea cron conserva su tipo de cambio anterior.
Monedas poco comunes u obsoletas: establece el tipo de cambio a mano
Si ningún agregador tiene datos de una moneda, escribe su tipo de cambio (unidades de esa moneda por una unidad de la moneda base) en el campo de tipo de cambio (rate) y guarda. Las actualizaciones automáticas respetan este tipo de cambio, porque la fuente no devuelve nada para él, pero sobrescriben los tipos de cambio manuales de las monedas que la fuente sí conoce. Para conservar tus propios tipos de cambio en todas las monedas, establece Actualización automática de tipos de cambio (Rate auto update) en no auto update. El campo de interés (interest) junto al tipo de cambio añade una cantidad fija sobre el tipo de cambio en el sitio, y establecer los tipos de cambio por código cubre reglas como añadir un porcentaje.
Los tipos de cambio no se actualizan automáticamente, o se agotan las solicitudes a la API
Actualización automática de tipos de cambio (Rate auto update) ofrece hourly, twicedaily (el valor predeterminado), daily, weekly y monthly. Cada ejecución envía una solicitud por cada moneda, además de la base. Con nueve monedas adicionales, son unas 540 solicitudes al mes con twicedaily, 270 con daily y menos de 40 con weekly, más nueve por cada clic en Actualizar todos los tipos de cambio (Update all rates). Cuando las solicitudes se agotan más rápido que eso, comprueba dos cosas:
- Sigue ejecutándose una programación antigua. El plugin crea su evento de WP-Cron (
wpcs_currencies_rate_auto_update) una sola vez, con el intervalo seleccionado en ese momento, y no lo vuelve a crear cuando cambias la opción. Tras pasar de hourly a weekly, el evento sigue ejecutándose cada hora. Elimínalo, y el plugin crea uno nuevo con el intervalo actual en la siguiente carga de página. Con WP-CLI:
Un plugin gestor de cron puede eliminar el mismo evento desde el administrador de WordPress.wp cron event delete wpcs_currencies_rate_auto_update - Otra copia del sitio usa la misma clave. Un sitio de pruebas o un clon ejecuta su propio WP-Cron y gasta la misma cuota. Dale su propia clave, o establece su Actualización automática de tipos de cambio (Rate auto update) en no auto update.
Si los tipos de cambio nunca se actualizan por sí solos, WP-Cron no se está ejecutando. Solo arranca cuando alguien visita el sitio, así que en un sitio con poco tráfico las actualizaciones llegan tarde. Cuando DISABLE_WP_CRON está definido en wp-config.php, una tarea del servidor debe llamar a wp-cron.php, como se describe en Hooking WP-Cron into the system task scheduler.
Lista de comprobación
- Cada moneda usa su código ISO 4217, y la moneda base tiene el tipo de cambio 1.
- El agregador seleccionado publica todas tus monedas y su plan acepta tu moneda base.
- Los agregadores que usan clave tienen su propia clave en Clave de API del agregador (Aggregator API key).
- Tras Actualizar todos los tipos de cambio (Update all rates), cada campo muestra un número antes de hacer clic en Guardar cambios (Save options).
- El intervalo de actualización automática se ajusta a tu cuota, y ninguna programación antigua ni copia de pruebas la gasta.
- Tras cambiar los tipos de cambio, se vacía la caché de página para que los visitantes reciban los precios nuevos.
Si los tipos de cambio siguen sin cargarse, abre un tema en el foro de soporte de WPCS con el agregador que usas, tu moneda base y el mensaje exacto del campo del tipo de cambio.