Precio fijo por moneda en WordPress con [wpcs_price type=fixed]
Un precio fijo por moneda en WordPress significa que eliges tú mismo el importe de cada moneda: 15 en dólares estadounidenses, 20 en euros, 45 en libras, sin ningún tipo de cambio de por medio. WPCS lo consigue con el atributo type=fixed del shortcode [wpcs_price]. La sintaxis es estricta y, cuando un solo carácter está mal, el precio muestra la palabra none o 0.00 en lugar de un importe. A continuación encontrarás la sintaxis exacta, qué significa cada síntoma y cómo controlar los céntimos en los precios fijos.
Precios convertidos y precios fijos
Un [wpcs_price value=100] normal interpreta 100 como un importe en tu moneda base y lo multiplica por el tipo de cambio de la moneda que ha seleccionado el visitante. El importe sigue a los tipos de cambio, por lo que cambia cada vez que se actualizan.
Con type=fixed, no se convierte nada. El plugin divide value en cada coma en pares CODE:amount, elige el par cuyo código es la moneda del visitante e imprime ese importe con el símbolo, los decimales y el formato numérico de esa moneda:
[wpcs_price value=100]
[wpcs_price type=fixed value=USD:15,EUR:20,GBP:45]
Un visitante que haya seleccionado EUR ve 20 euros en el segundo shortcode, sea cual sea el tipo de cambio de hoy. Usa precios fijos para importes que no deben moverse con los tipos de cambio: precios de mercado redondeados (19 en lugar de 18,37), listas de precios acordadas por país, planes de membresía y paquetes de servicios.
Precio fijo por moneda: las reglas de sintaxis
Los pares se separan con una simple división de cadenas, así que cada carácter cuenta.
| Escribe | No | Qué hace la forma incorrecta |
|---|---|---|
USD:15,EUR:20 | USD:15, EUR:20 | El espacio pasa a formar parte del código (" EUR"), así que EUR muestra none |
EUR:20 | eur:20 o Euro:20 | Los códigos deben ser los códigos de moneda de la pestaña Monedas (Currencies), en mayúsculas: de lo contrario, none |
EUR:1250.50 | EUR:1250,50 | La coma inicia un nuevo par: se muestra 1250.00 y los céntimos se pierden |
EUR:1250 | EUR:1,250 o EUR:1.250 | Los separadores de miles rompen el número: se muestra 1.00 o 1.25 |
EUR:20 | EUR:€20 | Un símbolo delante del número se lee como 0: 0.00 |
value=USD:15,EUR:20 | value=”USD:15,EUR:20” | La comilla tipográfica se pega al primer código: la primera moneda muestra none |
Un valor fijo no contiene espacios, así que no necesita comillas en absoluto. Escribir [wpcs_price type=fixed value=USD:15,EUR:20,GBP:45] sin ninguna comilla elimina por completo el error más frecuente.
Por qué el precio fijo muestra "none" o 0
Cada síntoma apunta a una causa:
| Lo que ves | Causa | Solución |
|---|---|---|
| Todas las monedas muestran 0 o 0.00 | type no se lee como fixed. Con type=”fixed”, WordPress no reconoce las comillas tipográficas como comillas y las deja en el valor, de modo que el shortcode trata el precio como uno normal e intenta convertir un texto que no es un número. | Escribe type=fixed |
La primera moneda de la lista muestra none, las demás funcionan | Un carácter de comilla pasó a formar parte de value, así que el primer código se lee ”INR en lugar de INR. Las comillas tipográficas lo provocan, y también algunos elementos de constructores de páginas y plugins de tablas que pasan las comillas como caracteres. | Quita las comillas alrededor de value |
Una moneda muestra none | La moneda falta en la lista (normalmente una moneda añadida después de escribir el shortcode), o su código difiere del de la pestaña Monedas (Currencies) | Añade el par o corrige el código |
Todas las monedas muestran none | value quedó vacío. Lo más habitual es que los pares se hayan puesto en meta_value, que espera el nombre de un campo personalizado, no precios | Usa value= para los pares escritos en el shortcode |
| El precio y el selector muestran monedas distintas | Una caché de página o la caché del navegador sirvió una página generada para otra moneda | Ver más abajo |
Las comillas tipográficas (” “) llegan con copiar y pegar: desde una página web, un documento, un correo o un chat, o desde una aplicación que sustituye las comillas rectas mientras escribes. Si no estás seguro de lo que hay en el editor, borra las comillas y vuelve a escribir el shortcode a mano.
Para la última fila: tras cambiar monedas o ajustes, vacía la caché de tu plugin de caché y la del navegador (Ctrl+F5) y vuelve a probar. Si en un sitio con caché los visitantes siguen recibiendo precios en la moneda equivocada, configura el plugin para el uso con caché como se describe en el selector de moneda y los plugins de caché.
Cada moneda necesita su propio importe
Un shortcode fijo no puede mezclar monedas fijas y convertidas. Una moneda sin par no se calcula a partir de los demás importes; muestra none. Por eso, cuando añades una moneda en la pestaña Monedas (Currencies), cada precio fijo del sitio necesita un par nuevo. Para encontrarlos, escribe type=fixed en el campo de búsqueda de las listas de Entradas (Posts) y Páginas (Pages) del administrador (la búsqueda mira dentro del contenido) y revisa por separado los widgets y las plantillas de constructores de páginas.
Si lo que realmente necesitas es un precio escrito en una moneda distinta de la base y convertido para todos los demás, es otra técnica: consulta cómo funciona la moneda base, que incluye un pequeño shortcode para precios introducidos en cualquier moneda.
Precios fijos guardados en un campo personalizado
Los pares pueden estar en un campo personalizado en lugar de en el shortcode. Pon el mismo texto en el campo, por ejemplo USD:15,EUR:20,GBP:45, e indica el campo en meta_value:
[wpcs_price meta_value=plan_prices type=fixed]
meta_value toma la clave meta del campo de la entrada actual (añade post_id=123 para otra entrada), y las mismas reglas de sintaxis se aplican al texto del campo. Cómo encontrar la clave correcta, sobre todo en los campos de ACF, se explica en convertir un campo de precio de ACF.
Céntimos, decimales y redondeo en precios fijos
Un importe fijo se imprime con los ajustes de la fila de su moneda en la pestaña Monedas (Currencies): Mostrar céntimos (Show cents) o Ocultar céntimos (Hide cents), Decimales (Decimals) y Formato (Format). Con dos decimales, USD:50 se muestra como 50.00. Estos ajustes se aplican a todos los precios de esa moneda, convertidos o fijos.
Los precios fijos no pasan por el filtro wpcs_price, así que el código de redondeo enganchado ahí solo modifica los precios convertidos. Es intencionado: un importe fijo se muestra tal como lo escribiste.
Para mostrar algunos precios fijos sin céntimos y otros con ellos (un plan a 50 y complementos a 1,15 en la misma página), añade a los shortcodes que deban perder los céntimos un atributo extra, por ejemplo name=no-cents. WPCS ignora los atributos desconocidos, pero los pasa todos al filtro wpcs_shortcode_price_html_manipulation junto con el HTML del precio y la moneda actual:
[wpcs_price type=fixed value=USD:50,EUR:45,GBP:40 name=no-cents]
[wpcs_price type=fixed value=USD:1.15,EUR:1.05,GBP:0.95]
/*
* WPCS: remove the decimal part from [wpcs_price ... name=no-cents].
* Child theme functions.php or a code snippets plugin.
*/
add_filter('wpcs_shortcode_price_html_manipulation', function ($price_html, $atts, $currency) {
global $WPCS;
if (is_array($atts) && isset($atts['name']) && $atts['name'] === 'no-cents') {
// decimal separator of this currency, from its Format setting
$sep = preg_quote($WPCS->get_decimal_separator($currency), '/');
// drop the separator and the digits after it, outside HTML attributes
$price_html = preg_replace('/(\d)' . $sep . '\d+(?![^<]*>)/', '$1', $price_html);
}
return $price_html;
}, 10, 3);
El filtro también funciona con los precios convertidos. Un límite: cuando Uso un plugin de caché en mi sitio (I am using cache plugin on my site) está en Sí (Yes) en la pestaña Opciones (Options), el plugin vuelve a dibujar cada precio con AJAX después de cargar la página, y ese redibujado no ejecuta este filtro. En un sitio así, usa Ocultar céntimos (Hide cents) o Decimales (Decimals) en la moneda.
Lista de comprobación
- El shortcode es
[wpcs_price type=fixed value=...]sin comillas, o solo con comillas rectas. - Cada moneda de la pestaña Monedas (Currencies) tiene un par, con su código en mayúsculas.
- Sin espacios, sin símbolos, sin separadores de miles, con punto para los decimales.
- Los pares escritos en el shortcode van en
value;meta_valuesolo contiene el nombre de un campo. - Cachés vaciadas tras los cambios y página probada en una ventana privada.
Si un precio fijo sigue mostrando none tras estas comprobaciones, abre un tema en el foro de soporte de WPCS con el shortcode exacto, los códigos de moneda de tu pestaña Monedas (Currencies) y un enlace a la página.