BEAR - WooCommerce Bulk Editor and Products Manager Professional

Editar en masa precios por moneda en WooCommerce: tiendas multimoneda

Para editar en masa los precios por moneda en WooCommerce, primero comprueba si hay algo que editar. La mayoría de los plugins multimoneda guardan un solo precio por producto, en la moneda base de la tienda, y lo convierten para cada visitante según el tipo de cambio: el precio en dólares o en libras existe solo en pantalla. Lo que sí se almacena son los precios fijos, los que defines por producto para una moneda y que sustituyen al tipo de cambio. Son meta de producto, y BEAR los edita como campos meta: los fija, los sube un porcentaje o los calcula a partir del precio base con redondeo. La segunda mitad de este artículo trata el problema contrario: el editor que muestra los precios en una moneda convertida y por qué eso importa antes de cualquier ejecución con porcentajes.

Qué precios por moneda se almacenan y dónde

PluginDónde se almacenan los precios fijosCómo editarlos en BEAR
FOX (WOOCS), precios fijos_woocs_regular_price_USD y _woocs_sale_price_USD, un par por cada código de monedaCampos meta numéricos
FOX, reglas GeoIP por producto_woocs_price_geo_countries, _woocs_regular_price_geo, _woocs_sale_price_geo (arrays)Vista de array: editar y copiar, sin porcentajes
WooCommerce Multilingual (WPML), precios personalizadosClaves con el código de moneda al final, como _regular_price_EUR, _sale_price_EUR y _price_EURCampos meta numéricos; mantén sincronizada la clave del precio activo
Price Based on CountryUna clave de precio normal, una de oferta y una de precio activo por zona de precios, con el ID de la zona en el nombreCampos meta numéricos; mantén sincronizada la clave del precio activo
Plugins que guardan todas las monedas en un solo campoUn texto JSON o un array por productoNo se pueden editar con operaciones numéricas

Confirma las claves en tu tienda antes de añadirlas. Introduce a mano los precios fijos en un producto y, a continuación, en la pestaña Campos meta (Meta Fields) de BEAR, escribe su ID en Obtener claves meta de cualquier producto mediante su ID (Get meta keys from any product by its ID). Para los precios definidos por variación, usa el ID de una variación: esos precios se guardan en cada variación, no en el padre. Añade las claves como campos del tipo número (number), ponles títulos cortos como USD normal, guarda y activa sus columnas en la pestaña Ajustes (Settings), como describe la documentación de Campos meta.

FOX: editar en masa los precios fijos por moneda

FOX guarda los precios fijos solo cuando Se permiten múltiples (Is multiple allowed) e Reglas de precios fijos individuales para cada producto (Individual fixed prices rules for each product) están activados en sus ajustes; el editor de producto muestra entonces un par de precios para cada moneda en los productos simples y en cada variación. Las claves son _woocs_regular_price_ y _woocs_sale_price_ seguidas del código de moneda en mayúsculas. La FAQ de compatibilidad con FOX muestra la misma configuración paso a paso.

Cómo lee FOX los valores decide lo que debes escribir:

  • Un valor superior a 0 es un precio fijo para esa moneda.
  • Un valor vacío o -1 significa que no hay precio fijo: FOX convierte el precio base según el tipo de cambio. El propio FOX guarda -1 cuando el campo se deja vacío en el editor de producto, por eso la columna muestra -1 en muchos productos, y establecer nuevo (set new) -1 es la forma limpia de quitar precios fijos en masa.
  • Si un producto está en oferta en la moneda base pero no tiene precio de oferta fijo en USD, FOX usa el precio normal fijo en USD, y los visitantes en USD no ven ningún descuento. Cuando inicies una oferta, define también los precios de oferta fijos.

Ejecuciones útiles, cada una con una sola fila marcada. Para la segunda y la tercera, filtra antes por USD normal desde (USD regular from) 0.01, para dejar en paz los productos sin precio fijo.

  • Fijar los precios en USD a partir del precio base. Marca USD normal, establecer nuevo 1.08 (tu tipo de cambio) y, en Campos numéricos seleccionados (Selected num fields), elige * y PRECIO NORMAL (regular price). Con 99 en el desplegable de redondeo, un producto a 46.00 recibe un precio fijo en USD de 49.99. La página de redondeo de precios lista las demás terminaciones.
  • Precio de oferta en USD un 20 % por debajo del precio normal en USD. Marca USD oferta (USD sale), establecer nuevo 0.8 y elige * con USD normal. La fórmula lee el otro campo del mismo producto, así que basta una ejecución.
  • Subir un 5 % todos los precios fijos en USD. Marca USD normal y usa aumentar en % (increase by %) 5; repite con USD oferta si los precios de oferta deben acompañarlo.

Para los productos variables, activa variaciones (variations) en el panel de herramientas, porque los precios fijos residen en las variaciones. Las reglas GeoIP de FOX son arrays: añádelas con la vista Array (array) y edítalas o cópialas como se describe en edición masiva de meta datos serializados. Los precios de FOX por rol de usuario no son por moneda en absoluto; se tratan en edición masiva de precios mayoristas y por rol.

WooCommerce Multilingual y Price Based on Country: mantener sincronizado el precio activo

WooCommerce guarda tres claves de precio por producto: _regular_price, _sale_price y _price, el precio que realmente se cobra, que recalcula al guardar un producto. Los plugins que copian este esquema por moneda o por zona tienen su propia clave de precio activo y la actualizan en su propia rutina de guardado, en el editor de producto. Cuando otra herramienta escribe solo la clave del precio normal, la clave activa conserva el número antiguo, y la tienda y la pantalla de edición del producto pueden mostrar precios distintos.

Por eso hay que cambiar las dos, en dos ejecuciones:

  1. Cambia la clave del precio normal, por ejemplo EUR normal con establecer nuevo o aumentar en %.
  2. Cópiala en la clave activa: marca EUR precio (EUR price), establecer nuevo 0 y elige + con EUR normal (EUR regular). Para los productos en oferta en esa moneda, copia en su lugar desde la clave de oferta, con un filtro EUR oferta desde (EUR sale from) 0.01. Ese filtro funciona para los productos simples; los filtros de campos meta solo miran los productos padre, así que revisa a mano las variaciones en oferta.

Después compara un producto editado con uno que hayas guardado a mano, usando Obtener claves meta de cualquier producto mediante su ID para ambos. Si el producto guardado a mano tiene una clave adicional que le falta al editado, como _wcml_custom_prices_status de WooCommerce Multilingual, que activa los precios personalizados para un producto, añádela y fíjala igual. Si además la tienda tiene varios idiomas, recuerda que cada traducción es un producto con su propia meta; edición masiva de precios en todos los idiomas de WPML explica qué idioma edita BEAR y cómo trasladar los cambios a las traducciones.

El editor muestra precios convertidos en lugar de la moneda base

A veces la columna PRECIO NORMAL (Regular price) muestra precios en otra moneda, mientras que el número que escribes se guarda en la moneda base. La causa está en cómo se leen los precios. BEAR lee el precio normal y el de oferta mediante las funciones de producto de WooCommerce, y los conmutadores de moneda convierten los precios justamente en esas funciones. BEAR carga la tabla y ejecuta las ediciones masivas mediante admin-ajax.php, y muchos conmutadores convierten los precios en este tipo de peticiones, porque el propio carrito de la tienda las usa. Muchos también recuerdan la moneda que elegiste por última vez en la parte pública de la tienda, en una cookie o sesión que llevan tus peticiones de administración, y por eso la columna puede cambiar de moneda un día sin que haya cambiado ningún ajuste.

Con FOX esto está resuelto: en la página del editor, BEAR devuelve FOX a la moneda base y elimina los filtros de conversión de FOX. Con otros conmutadores depende del conmutador. No es solo un problema de visualización: aumentar en % y disminuir en % (decrease by %) sobre el precio normal y el de oferta parten del número que lee BEAR, de modo que un precio convertido más un 10 % se guardaría como el nuevo precio base. Los campos meta, incluidos los precios fijos, no se ven afectados, ni tampoco los valores que lee Campos numéricos seleccionados: ambos vienen directamente de la meta almacenada.

Antes de una ejecución con porcentajes, compara dos o tres productos de la columna PRECIO NORMAL con la pestaña General de sus páginas de edición. Si difieren:

  1. Abre la parte pública de la tienda en el mismo navegador, selecciona la moneda base en el conmutador y recarga BEAR.
  2. Si la columna sigue mostrando precios convertidos, añade el fragmento siguiente. Elimina los filtros de precio solo durante las peticiones propias de BEAR, igual que lo hace el servidor MCP de BEAR en sus conexiones, y no toca la tienda ni el resto de wp-admin. Tiene el mismo efecto en los plugins B2B que muestran precios por rol en el editor.
/*
 * BEAR: read product prices without conversion or role-price filters during
 * the bulk editor's own requests, so the price columns and percentage
 * operations use the stored base prices.
 * Child theme functions.php or a code snippets plugin.
 */
add_action('admin_init', function () {
    if (!wp_doing_ajax() || empty($_REQUEST['action'])) {
        return;
    }

    $action = sanitize_key(wp_unslash($_REQUEST['action']));
    if (0 !== strpos($action, 'woobe_')) {
        return;
    }

    $hooks = array(
        'woocommerce_product_get_price',
        'woocommerce_product_get_regular_price',
        'woocommerce_product_get_sale_price',
        'woocommerce_product_variation_get_price',
        'woocommerce_product_variation_get_regular_price',
        'woocommerce_product_variation_get_sale_price',
    );

    foreach ($hooks as $hook) {
        remove_all_filters($hook);
    }
}, 999);

Recarga BEAR y compara de nuevo. Si un conmutador sigue convirtiendo, aplica sus tipos de cambio en otro sitio; pregunta a sus autores cómo desactivar la conversión en las páginas de administración.

Antes de una ejecución masiva sobre precios por moneda

  • Las claves están confirmadas con Obtener claves meta de cualquier producto mediante su ID, en una variación si son precios de variación.
  • Las columnas de precios fijos tienen el tipo número y están activadas.
  • En WooCommerce Multilingual y Price Based on Country, la clave del precio activo se actualiza en una segunda ejecución.
  • La columna PRECIO NORMAL coincide con las páginas de edición de producto antes de cualquier ejecución con porcentajes.
  • Una ejecución errónea se revierte en la pestaña Historial (History) en lugar de corregirla con un porcentaje opuesto.

Si tu plugin de monedas guarda los precios de una forma que no figura aquí, publica su nombre y el ID de un producto en el foro de soporte de BEAR.