Guía
Actualizado 27 de octubre de 2026
7 min de lectura

Cómo actualizar precios en WooCommerce con la tasa BCV

Sincroniza la tasa, evita consultar la API en cada visita y muestra precios en bolívares sin romper tu catálogo.

Lo que vas a aprender

  • Sincronizar la tasa con el cron de WordPress.
  • Mostrar bolívares sin tocar el precio base en USD.
  • Actualizar precios guardados con backup y staging.
En esta guía

WooCommerce no trae una integración nativa con el BCV. Lo más sano es separar dos cosas: la tasa de referencia que actualizas periódicamente y la forma en que muestras o guardas el precio en bolívares. Si mezclas ambas en cada request, tu tienda se vuelve frágil.

1. Guarda la API key fuera del tema

Define la key en wp-config.php o en una variable de entorno del servidor. No la pongas en el tema ni en un plugin que se comparta por Git.

PHP
Copiar
define('MONTOSVE_API_KEY', 'tu_api_key');

2. Sincroniza la tasa una vez por hora

Usa el cron de WordPress para consultar la API y guardar la tasa. No llames a la API desde cada página.

PHP
Copiar
add_action('montosve_sync_rate', function (): void {
    $response = wp_remote_get(
        'https://api.montosve.com/v1/fx/convert?amount=1&from=USD&to=VES&market=bcv',
        [
            'headers' => ['X-API-Key' => MONTOSVE_API_KEY],
            'timeout' => 10,
        ],
    );

    if (is_wp_error($response)) {
        return;
    }

    $body = json_decode(wp_remote_retrieve_body($response), true);
    $rate = $body['data']['rate'] ?? null;

    if (! is_numeric($rate)) {
        return;
    }

    update_option('montosve_bcv_rate', (float) $rate, false);
    update_option('montosve_bcv_rate_updated_at', time(), false);
});

add_action('init', function (): void {
    if (! wp_next_scheduled('montosve_sync_rate')) {
        wp_schedule_event(time(), 'hourly', 'montosve_sync_rate');
    }
});
Guarda también montosve_bcv_rate_updated_at. Si la tasa tiene más de unas horas, muéstrala como referencia y no como precio definitivo.

3. Opción segura: mostrar el equivalente en Bs

Si tu catálogo base está en USD, no cambies el precio guardado. Agrega el equivalente en bolívares al lado del precio original.

PHP
Copiar
add_filter('woocommerce_get_price_html', function (string $price, $product): string {
    $rate = (float) get_option('montosve_bcv_rate', 0);

    if ($rate <= 0) {
        return $price;
    }

    $usd = (float) $product->get_price();

    if ($usd <= 0) {
        return $price;
    }

    $bs = $usd * $rate;

    return $price . ' <small class="montosve-bs">≈ Bs. '
        . number_format($bs, 2, ',', '.') . '</small>';
}, 10, 2);

Esta opción no toca precios ni impuestos. Es la más segura si tu tienda cobra en USD y solo quieres dar contexto en bolívares.

4. Opción avanzada: actualizar precios guardados

Si tu tienda cobra en Bs y guardas el precio de venta en esa moneda, necesitas una referencia en USD para recalcular. Hazlo en un job programado, con backup y en staging primero.

PHP
Copiar
$rate = (float) get_option('montosve_bcv_rate', 0);

if ($rate > 0) {
    $products = wc_get_products([
        'limit' => -1,
        'status' => 'publish',
        'type' => 'simple',
    ]);

    foreach ($products as $product) {
        $usd = (float) get_post_meta($product->get_id(), '_montosve_usd_price', true);

        if ($usd <= 0) {
            continue;
        }

        $product->set_regular_price((string) round($usd * $rate, 2));
        $product->save();
    }
}
No ejecutes este bloque en cada visita ni en el checkout. Si tu precio base está en Bs y no guardas una referencia en USD, primero crea esa referencia; si no, cada actualización acumula distorsión.

5. Variaciones y productos variables

Para productos variables, recorre cada variación y actualiza solo las que tengan una referencia en USD:

PHP
Copiar
foreach ($product->get_children() as $variationId) {
    $variation = wc_get_product($variationId);

    if (! $variation) {
        continue;
    }

    $usd = (float) get_post_meta($variationId, '_montosve_usd_price', true);

    if ($usd <= 0) {
        continue;
    }

    $variation->set_regular_price((string) round($usd * $rate, 2));
    $variation->save();
}

Checklist

  • API key fuera del tema y de Git.
  • Tasa sincronizada por cron, no en cada request.
  • Timestamp visible y fallback si la API falla.
  • Precio base en USD antes de actualizar precios en Bs.
  • Probar en staging y hacer backup antes de tocar precios guardados.

Preguntas frecuentes

¿Debo cambiar la moneda de mi tienda a bolívares?

No necesariamente. Si tu catálogo base está en USD, puedes mantenerlo y mostrar el equivalente en Bs. Si tu tienda cobra en Bs, guarda una referencia en USD y actualiza el precio de venta con la tasa.

¿Cada cuánto debo actualizar la tasa?

Para precios de catálogo, una vez por hora suele ser suficiente. Para promociones o checkout en tiempo real, consulta la tasa al momento de la operación y muestra el timestamp.

¿Qué pasa con los productos variables?

Cada variación tiene su propio precio. Recorre las variaciones y actualiza solo las que tengan un precio base en USD; no apliques la tasa dos veces.

¿Qué hago si la API falla?

Mantén la última tasa válida con su timestamp y muestra un aviso si está vieja. No publiques un precio inventado ni un cero.

¿Listo para integrarlo?

Crea tu key gratis y pasa a un plan de producción cuando lo necesites. Sin renovación automática.