FOX - WooCommerce Currency Switcher Professional

Precio fijo por moneda en WooCommerce: configuración, reglas y límites

Un precio fijo por moneda en WooCommerce significa que tú decides cuánto cuesta un producto en cada moneda en lugar de dejar que lo decida el tipo de cambio: 49 en dólares, 45 en euros, 3.900 en rupias, haga lo que haga el tipo de cambio esta semana. FOX lo consigue con campos por producto para cada moneda. La configuración lleva un minuto, y la mayoría de los problemas vienen de unas pocas reglas poco evidentes: dónde va el precio base, qué significa un campo vacío, qué tipos de producto leen los campos y quién puede guardarlos. Todo ello se explica a continuación.

Cómo funcionan los precios fijos por moneda

Cada producto conserva su precio normal de WooCommerce, introducido en la moneda base de la tienda. Ese precio sigue siendo obligatorio: un producto con solo precios fijos y el precio de WooCommerce vacío no tiene precio alguno. Para cada una de las demás monedas, FOX busca un precio fijo en el producto:

  • Si el campo de la moneda del visitante está relleno, se usa esa cantidad tal como se escribió, sin convertirla.
  • Si está vacío, el precio es el precio base multiplicado por la tasa de la moneda, como en cualquier producto sin precios fijos.
  • Un 0 cuenta como vacío. Un precio fijo no puede hacer que un producto sea gratuito en una moneda.

Así puedes fijar los precios de una moneda y dejar que las demás se conviertan, o fijar solo los productos que necesitan cifras redondas. No hay un campo fijo para la propia moneda base: su precio es el campo de WooCommerce.

Configura los precios fijos

  1. En WooCommerce → Ajustes → Moneda (WooCommerce → Settings → Currency), pestaña Divisas (Currencies), comprueba que la moneda de la tienda está marcada en la columna Basico (Basic). Si está marcada la moneda equivocada, la pantalla del producto ofrece campos para las monedas equivocadas.
  2. En la pestaña Avanzado (Advanced), establece Es múltiple permitido (Is multiple allowed) en Sí (Yes). Los precios fijos solo tienen sentido cuando el cliente paga en la moneda seleccionada, y la opción de precios fijos se oculta y se desactiva mientras esto esté en No.
  3. Activa Reglas de precios fijos individuales para cada producto (Individual fixed prices rules for each product) y guarda.
  4. Abre un producto. En Datos del producto → General (Product data → General), bajo los campos de precio de WooCommerce, haz clic en Las reglas de precios fijos del producto (The product fixed prices rules).
  5. Elige una moneda en el desplegable y haz clic en Añadir (Add), o haz clic en Añadir todo (Add all) para todas las monedas a la vez. Cada moneda recibe un campo Precio regular (Regular price) y un campo Precio de venta (Sale price); un campo vacío muestra auto, que significa conversión según la tasa. retirar (Remove) elimina la fila.
  6. Actualiza el producto y comprueba el precio en la parte pública en cada moneda.

Escribe los importes con el separador decimal establecido en WooCommerce → Ajustes → General (WooCommerce → Settings → General) y sin separador de miles: 745920, no 745.920. FOX elimina el separador de miles de WooCommerce y lee el separador decimal, de modo que un número escrito con el formato de otra configuración regional se guarda con una magnitud equivocada: 745.92 en lugar de 745920, o 4550 en lugar de 45.50.

Productos variables

Los precios fijos se establecen por variación, no en el producto principal. Despliega una variación en Datos del producto → Variaciones (Product data → Variations) y el mismo botón Las reglas de precios fijos del producto (The product fixed prices rules) aparece al final de sus ajustes. Guarda las variaciones. El rango de precios que se muestra en la página de la tienda se construye a partir de los precios de las variaciones en la moneda del visitante, incluidos los fijos.

Muchos productos a la vez

Los precios fijos son metadatos del producto que llevan el nombre del código de moneda: _woocs_regular_price_EUR y _woocs_sale_price_EUR, guardados en el producto o en cada variación. Un importador o un editor masivo que escriba metadatos personalizados puede, por tanto, rellenarlos para todo un catálogo; consulta edición masiva de los campos de precio fijo y establecer un precio fijo mediante programación. Para leer un precio fijo en tu propio código, para un feed o una plantilla personalizada:

/*
 * FOX: the fixed price of a product or variation in a currency,
 * or null when the field is empty and the price is converted by rate.
 * $type is 'regular' or 'sale'.
 * Child theme functions.php or a code snippets plugin.
 */
function my_fox_fixed_price( $product_id, $currency, $type = 'regular' ) {
    $value = (float) get_post_meta( $product_id, '_woocs_' . $type . '_price_' . strtoupper( $currency ), true );
    return $value > 0 ? $value : null;
}

// Example: my_fox_fixed_price( 123, 'EUR' ) returns 45.0, or null

Un campo vaciado se guarda como -1, y por eso la función trata todo lo que no sea mayor que cero como "sin precio fijo".

Precios de oferta, impuestos, redondeo y descuentos

  • Ofertas. Cuando el producto está en oferta, FOX usa el campo Precio de venta (Sale price) de la moneda. Si ese campo está vacío, la moneda muestra su precio regular fijo sin ningún descuento: la oferta del precio base no se convierte en ella. Cuando hagas una oferta, rellena el campo de oferta de cada moneda que tenga un precio regular fijo.
  • Impuestos. Los precios fijos siguen el mismo ajuste Precios introducidos con impuestos (Prices entered with tax) que tus precios base. Con los precios introducidos con impuestos incluidos, WooCommerce sigue recalculando el importe bruto para los clientes cuyo tipo impositivo difiere del de la ubicación base de la tienda, de modo que un precio fijo de 49.00 puede mostrarse distinto a ese cliente. Es el comportamiento fiscal de WooCommerce, controlado por su filtro woocommerce_adjust_non_base_location_prices.
  • Redondeo. Los fragmentos de redondeo en woocs_raw_woocommerce_price también reciben los precios fijos. Redondear los precios convertidos muestra cómo dejar fuera esas monedas.
  • Plugins de descuentos y de precios. FOX sustituye el precio que recibe por el precio fijo, así que un descuento que otro plugin haya aplicado antes de ese punto (precios dinámicos, escalas por cantidad, precios por rol o mayoristas) se pierde en las monedas que tienen un precio fijo. Un plugin o un fragmento puede aplicar su descuento al precio fijo mediante el filtro woocs_fixed_raw_woocommerce_price. Consulta antes la página de compatibilidad del plugin en este sitio.
  • Filtro de precios. El filtro de precios de WooCommerce busca en los precios base de la base de datos y solo muestra el rango convertido según la tasa. Un producto cuyo precio fijo se aleja mucho de su precio convertido puede quedar en el lado equivocado de un rango del filtro.

Los cupones y los envíos tienen sus propios importes por moneda: Importe fijo individual para cupón (Individual fixed amount for coupon) e Importe fijo individual para envío (Individual fixed amount for shipping) en la pestaña Avanzado (Advanced). Para los envíos, consulta conversión de moneda del coste de envío.

Qué tipos de producto admiten precios fijos

Los campos están pensados para los productos estándar de WooCommerce. Aparecen en los productos simples y externos, en cada variación de un producto variable y en los tipos subscription, composite, bundle y box_product. Que un precio fijo sea correcto en el carrito depende de cómo calcula su precio el tipo de producto:

  • Los productos simples, externos y variables leen el precio fijo directamente.
  • Los paquetes (bundles) y los productos compuestos suman los precios de sus artículos en su propio código. Un precio fijo sustituye el precio del producto contenedor, no el cálculo de la extensión. Lee la página de tu extensión: Product Bundles, Composite Products, YITH Product Bundles.
  • Las reservas, las tarjetas regalo, los cursos y otros tipos de producto personalizados calculan los precios a su manera (según la duración, según un importe que elige el comprador) y se convierten según la tasa. No tienen campos fijos.
  • Suscripciones: el precio fijo pasa a ser el precio recurrente, pero en los productos con cuota de alta también sustituye al primer pago, de modo que la cuota se pierde. Más detalles en WooCommerce Subscriptions en varias monedas.

Para mostrar los campos en otro tipo de producto, añade su slug con el filtro woocs_product_fixed_price_data_simple_types. Eso hace que los campos aparezcan; no hace que el tipo los use. Prueba un pedido real en una segunda moneda antes de confiar en ello.

Precios distintos por país

Los precios fijos pertenecen a las monedas, no a los países. Hay dos maneras de fijar precios por país:

  • Cada país tiene su propia moneda. Establece precios fijos por moneda y asigna países a monedas en la pestaña GeoIP: los visitantes de Suiza abren la tienda en francos y ven tu precio en francos. La configuración está en cambiar la moneda automáticamente por país y en precio de WooCommerce según el país.
  • Varios países comparten una moneda pero necesitan precios distintos. Activa Reglas GeoIP individuales para cada producto (Individual GeoIP rules for each product) y usa Las reglas GeoIP personalizadas del producto (The product custom GeoIP rules) en el producto: estableces un precio para un grupo de países, en la moneda base, y se convierte según la tasa a la moneda que use el visitante. Un precio fijo para la moneda del visitante tiene prioridad sobre él. No es posible tener dos precios fijos distintos en la misma moneda para dos países.

Los precios fijos hacen que una moneda sea más barata que otra, y un visitante puede cambiar a la más barata. Pago por reglas de GeoIP (Checkout by GeoIP rules) en la pestaña Avanzado (Advanced) hace que los clientes paguen en la moneda de su país; consulta la moneda de pago según el país del cliente para ver cómo funciona y cuáles son sus límites.

Campos que faltan, que no se guardan o que son incorrectos

Falta el botón o los campos

  • Es múltiple permitido (Is multiple allowed) está en No, o Reglas de precios fijos individuales para cada producto (Individual fixed prices rules for each product) está desactivado.
  • El tipo de producto no figura en la lista anterior. En un producto variable, mira dentro de cada variación.
  • El desplegable ofrece solo algunas monedas: la moneda base nunca aparece, y las monedas que ya tienen una fila no se vuelven a ofrecer.
  • Un error de JavaScript de otro plugin en la pantalla de edición del producto mantiene oculto el panel de FOX, porque el panel se muestra mediante script. Abre la consola del navegador (F12) en la pantalla del producto, busca el plugin que se nombra en el error y desactívalo para confirmarlo. Los códigos de moneda que no son códigos ISO reales también provocan estos errores; consulta códigos de moneda personalizados.

Los valores no se guardan

FOX guarda los precios fijos solo para los usuarios con la capacidad manage_options, que por defecto solo tienen los administradores. Un Shop Manager (gestor de la tienda) puede ver los campos y escribir en ellos, pero los valores se descartan sin avisar, y la pantalla sigue mostrando lo que estaba guardado antes. Guarda como administrador, o concede la capacidad solo mientras se guarda un producto:

/*
 * Let users who can edit products (Shop Manager) save FOX fixed prices.
 * manage_options is granted only during the product save actions.
 * Child theme functions.php or a code snippets plugin.
 */
add_filter( 'user_has_cap', function ( $allcaps, $caps, $args, $user ) {
    if ( in_array( 'manage_options', $caps, true ) && ! empty( $allcaps['edit_products'] ) ) {
        if ( doing_action( 'woocommerce_process_product_meta' )
            || doing_action( 'woocommerce_save_product_variation' )
            || doing_action( 'woocommerce_process_product_meta_variable' ) ) {
            $allcaps['manage_options'] = true;
        }
    }
    return $allcaps;
}, 10, 4 );

Otros plugins que comprueban manage_options mientras se guarda un producto también ven la capacidad durante esas acciones, así que añade esto solo si el rol de Shop Manager debe gestionar los precios.

El precio es incorrecto en la parte pública

  • Comprueba el valor guardado: el metadato _woocs_regular_price_XXX en el producto, o en el ID de la variación en los productos variables. Un valor cien o mil veces desviado es el problema de los separadores descrito en la configuración.
  • Los precios cambian un instante después de cargar la página, o el código fuente de la página (Ctrl+U) muestra importes distintos de los de la pantalla: la página procede de una caché, o el servidor no conocía la moneda del visitante. Consulta el selector de monedas vuelve a la moneda predeterminada.
  • El precio fijo se muestra pero el total del carrito es distinto: un plugin de descuentos, de paquetes o de precios calcula el carrito. Prueba con solo WooCommerce y FOX activos y un tema predeterminado, y luego vuelve a activar los demás uno por uno.

Si el precio fijo sigue sin usarse, abre un tema en el foro de soporte de FOX con el enlace del producto, su tipo y los valores de los metadatos guardados, y lo revisaremos.