Precios por geolocalización y multimoneda en WooCommerce

La fijación de precios por país y la visualización en varias monedas mejoran la conversión y reducen fricción en checkout.

Precios por geolocalización y multimoneda en WooCommerce

Con WooCommerce es posible detectar la ubicación del visitante, ajustar la moneda y aplicar un tipo de cambio propio sin depender de pasarelas externas.

Mostrando al visitante las opciones válidas para su país.

Pasos esenciales

Active la geolocalización en WooCommerce:

Ajustes → General → Ubicación del cliente → Geolocalizar (con caché de página).

Defina monedas objetivo y reglas por país:

EJ: MXN para Méjico; USD o EUR para visitantes extranjeros.

Establezca un tipo de cambio controlado:

Tasa fija configurable en código o plugin.

Aplique conversión en catálogo y carrito:

Asegure coherencia de precios en todo el flujo identificando la ubicación de cada visitante.

Revise métodos de pago por país/moneda:

Oculte ccondiciones locales y habilite PayPal/Stripe/Mercado Pago en el exterior.

Checklist de control

Ítem Listo
Geolocalización habilitada y probada en modo incógnito
Moneda por defecto correcta por país
Tasa de cambio documentada y actualizada
Totales de carrito y email coinciden con catálogo
Métodos de pago filtrados por país/moneda

Bloque de código: moneda USD fuera de AR + conversión con tasa propia

Demostración. Úselo en un plugin funcional o en el functions.php del tema hijo.

<?php
// 1) Definir tasa propia
function rp_get_custom_rate() {
    return 1000.0; // MXN→USD tasa manual
}

// 2) Forzar moneda según país detectado
add_filter('woocommerce_currency', function ($currency) {
    if (function_exists('wc_get_customer_default_location')) {
        $loc = wc_get_customer_default_location(); // usa geo-IP
        $country = is_array($loc) && !empty($loc['country']) ? $loc['country'] : '';
        if ($country && $country !== 'MX') {
            return 'USD';
        }
    }
    return 'ARS';
});

// 3) Convertir precios cuando la moneda activa sea USD
function rp_convert_price_if_usd($price, $product) {
    if (get_woocommerce_currency() === 'USD') {
        $rate = rp_get_custom_rate();
        if ($rate > 0) {
            $price = floatval($price) / $rate; // mostrar/calcular en USD
        }
    }
    return $price;
}
add_filter('woocommerce_product_get_price', 'rp_convert_price_if_usd', 10, 2);
add_filter('woocommerce_product_variation_get_price', 'rp_convert_price_if_usd', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'rp_convert_price_if_usd', 10, 2);
add_filter('woocommerce_product_get_sale_price', 'rp_convert_price_if_usd', 10, 2);

// 4) Opcional: formatear decimales al mostrar
add_filter('wc_get_price_decimals', function ($decimals) {
    return get_woocommerce_currency() === 'USD' ? 2 : 0;
});
?>
Notas rápidas:
¿Desea precios por país y multimoneda con tasa propia y pagos filtrados?