Aplique el cupón de woocommerce solo al total del carrito, no a la línea de impuestos

4 minutos de lectura

avatar de usuario
fresno patel

Estoy trabajando en un sitio de WooCommerce. Cuando aplico un cupón en la página de pago, también se aplica automáticamente al impuesto.

Solo quiero que el código de cupón se aplique al total del carrito. He buscado en Google un enlace o complemento relacionado, pero no puedo encontrar una solución que funcione.

Este es mi gancho de código actual en mi functions.phppero no funciona como se esperaba.

add_action('woocommerce_product_tax_class', 'set_tax_class');
function set_tax_class () { 
    if (!empty($woocommerce->cart->applied_coupons)){
        $tax_class="gratuty";
    }
    return $tax_class;
}

tambien he probado el woocommerce_cart_calculate_fees gancho también, pero no funcionó.

¿Qué gancho debo usar para actualizar el carrito, cuando se aplica el cupón, sin cambiar el impuesto?

  • Mira este stackoverflow.com/a/27166704/4778809

    – Vikas Yadav

    13 de julio de 2018 a las 8:24

  • @VikasYadav: el enlace anterior es para agregar un descuento programáticamente al carrito, ya estoy aplicando el cupón desde la página de pago, en ese momento el cupón también se aplica a los impuestos, lo cual no quiero hacer.

    – Ceniza Patel

    13 de julio de 2018 a las 10:09

  • Esto es simplemente demasiado complejo (o amplio), porque no puede usar solo un enlace para eso, ya que hay muchos tipos de cupones que se calculan de diferentes maneras (por lo que los impuestos se pueden establecer en líneas de artículos o en líneas de totales). También debe encontrar los ganchos correctos relacionados con el carrito y también para pedir objetos. Así que esto parece ser realmente enorme. Automatic/Woocommerce debería haber implementado una opción (solo tiene API de tarifa) para obtenerlos con o sin impuestos, pero desafortunadamente no es el caso.

    – LoicTheAztec

    14 de julio de 2018 a las 9:54

  • Para Fee Api cuando se usa como un descuento (una tarifa negativa), como ha visto, el argumento de los impuestos funciona para una tarifa negativa, ya que aplica el descuento a los impuestos, pero es mucho más fácil de ajustar…

    – LoicTheAztec

    14 de julio de 2018 a las 10:01

  • Edité su pregunta para mayor claridad, está pendiente de aprobación. Tenga en cuenta que ha tenido function.php cuando debería ser functions.php. Ese es el nombre de archivo correcto que debe usar y quería asegurarme de que lo supiera y también eso es lo que tiene.

    – dom dambrogia

    19 de julio de 2018 a las 17:21

Creo que debe consultar Impuestos en WooCommerce >> Configuración >> Impuestos. En esto, debe seleccionar la casilla de verificación con “No, ingresaré precios sin impuestos”.

Además, consulta siguiendo el enlace para saber más sobre Impuestos:
https://github.com/woocommerce/woocommerce/wiki/How-Taxes-Work-in-WooCommerce

O aparte de eso, también puede entender este código para aplicar un cupón mediante programación:

function apply_matched_coupons(){
    $coupon_code="freeweek"; 
    if ( WC()->cart->has_discount( $coupon_code ) ) return;     
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        // this is your product ID
        $autocoupon = array( 40 );
        if( in_array( $cart_item['product_id'], $autocoupon ) ) {   
            WC()->cart->add_discount( $coupon_code );
            wc_print_notices();
        }
    }
}

¡Espero que esto ayude!

Puede agregar el código de cupón automáticamente en el carrito y pagar en ambas páginas. Supongamos que el cliente agrega un producto al carrito pero no abre la página del carrito y mueve directamente la página de la tienda a la página de pago y luego emite un cupón de aplicación automática para la página del carrito

Por lo tanto, debe llamar a ambos ganchos (página del carrito y página de pago)

/**
 * Apply a Coupon Programmatically 
 * Add coupon when the user views the cart page.
 * Add coupon when the user views checkout page.
 */

// Add coupon when user views cart page.
add_action('woocommerce_before_cart_table', 'woo_apply_matched_coupons');

// Add coupon when user views checkout page.
add_action('woocommerce_before_checkout_form', 'woo_apply_matched_coupons');

function woo_apply_matched_coupons() {
    global $woocommerce;

    $coupon_code="ABCD125467";   // your coupon code

    // If coupon not Applied!.
    if (!$woocommerce->cart->add_discount(sanitize_text_field($coupon_code))) {
        wc_print_notices();
    } 

    // Manually recalculate totals.  If you do not do this, a refresh is required before the user will see updated totals when the discount is removed.
    $woocommerce->cart->calculate_totals();
}

wo-commerce ya tiene la opción de aplicar el cupón en el carrito totalcomo esto

¿Ha sido útil esta solución?