• Resuelto charlie0412

    (@charlie0412)


    Saludos colegas:

    En mi tienda deseo realizar el cambio de moneda según el país que el cliente seleccione en la dirección de facturación, hasta cierto punto lo he logrado con el siguiente código, pero solo funciona con los productos simples, no así con los variables, les agradecería si pudieran ayudarme:

    add_filter('woocommerce_get_price', 'return_custom_price', $product, 2);
    
    function return_custom_price($price, $product) {    
        global $post, $woocommerce;
    	
        // Array containing country codes
        $county = array('US');
        // Amount to increase by
        //$amount = 5;
        // If the custromers shipping country is in the array
        if ( in_array( $woocommerce->customer->get_billing_country(), $county ) && is_checkout() ){
            // Return the price plus the $amount
           return $new_price = ($price/260)*1.25;
        } else {
    		 
            // Otherwise just return the normal price
            return $price;
        }
    } 
    
    
Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • Hola, @charlie0412:

    Ten en cuenta que estos foros están pensados para resolver errores y problemas de configuración básicos, por lo que no deberías esperar que te respondan a consultas que tendría que resolver un profesional. Espero que no lo tomes a mal, es solo un consejo que te doy, ya que podría pasar que nunca recibas una respuesta, puesto que todos los que colaboramos en estos foros somos voluntarios con tiempo limitado y nos enfocamos en ayudar a usuarios que están comenzando con WordPress, no a usuarios avanzados, como tú.

    Dicho esto, como has proporcionado el código que estás usando, lo he reescrito, como gesto de cortesía, para que funcione en ambos tipos de productos, tanto simples como variables:

    /**
     * WooCommerce:
     * Modifica el precio de los productos para países específicos
     */
    add_filter( 'woocommerce_product_get_price', 'wc_return_custom_price', 10, 2 );
    add_filter( 'woocommerce_product_variation_get_price', 'wc_return_custom_price', 10, 2 );
    function wc_return_custom_price( $price, $product ) {    
        global $woocommerce;
    	
        // Array que contiene los códigos de los países donde se aplicará el precio modificado
        $countries = array( 'US' );
        
        // Si es la página de finalizar pago y el país de facturación del cliente está en el array...
        if ( is_checkout() && in_array( $woocommerce->customer->get_billing_country(), $countries ) ){
            // ...devuelve el precio modificado
            return ( $price / 260 ) * 1.25;
        } else {
            // Si no, devuelve el precio normal
            return $price;
        }
    }

    Me causó curiosidad la fórmula que estás usando (( $price / 260 ) * 1.25)

    ¿Es un error o quieres disminuir el precio para los Estados Unidos?

    Iniciador del debate charlie0412

    (@charlie0412)

    Hola @yordansoares:

    El código funciona perfectamente, gracias, entiendo lo que mencionas sobre el propósito del foro, la próxima vez cumpliré con ello, en cuanto a lo que me preguntas al final, le cuento que en mi país la moneda está muy devaluada con respecto al USD y tasa cambiaria es muy variable en cortos márgenes de tiempo, actualmente 1 USD equivale a 260 pesos nacionales, y la multiplicación final es por concepto de comisiones de procesamiento de Stripe.

    Saludos

    Hola, @charlie0412:

    ¡Me alegra saber que te ha funcionado el código!

    Por otro lado, gracias por responder a la pregunta sobre la fórmula. Te comento que en Venezuela tenemos un caso similar con el cambio entre el dólar estadounidense y el bolívar, aunque de facto el régimen venezolano ha permitido poner precios en USD, así que ya no tenemos que hacer conversiones de este tipo, si se establece esta moneda por defecto.

    ¡Que tengas un excelente fin de semana!

Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • Debes estar registrado para responder a este debate.