¿Cómo eliminar mediante programación los cupones de descuento aplicados en Woocommerce?

3 minutos de lectura

avatar de usuario
Walton

He estado buscando por un tiempo pero no puedo encontrar cómo eliminar los cupones de woocommerce mediante programación.

Estoy tratando de hacer descuentos basados ​​en el total del carrito. Necesito aplicar eliminar cupones porque si tiene productos por valor de 1000 € (cupón de descuento del 15% aplicado) y elimina productos y deja solo productos por valor de 50 €, aún obtiene este 15% de descuento porque mi código no está eliminando el cupón ya aplicado .

Así que aquí está mi código por ahora:

    add_action( 'woocommerce_before_cart', 'apply_matched_coupons' );

function apply_matched_coupons() {
    global $woocommerce;

$coupon_code5 = '5p'; // your coupon code here
$coupon_code10 = '10p'; // your coupon code here
$coupon_code15 = '15p'; // your coupon code here
$coupon_code20 = '20p'; // your coupon code here
$coupon_code25 = '25p'; // your coupon code here

   if ( $woocommerce->cart->has_discount( $coupon_code ) ){ 
return;
}

   if ( $woocommerce->cart->cart_contents_total >= 4000 ) {
        $woocommerce->cart->add_discount( $coupon_code25 );
        $woocommerce->show_messages();
    }
else if ( $woocommerce->cart->cart_contents_total >= 2000 ) {
        $woocommerce->cart->add_discount( $coupon_code20 );
        $woocommerce->show_messages();
    }
else if ( $woocommerce->cart->cart_contents_total >= 1000 ) {
        $woocommerce->cart->add_discount( $coupon_code15 );
        $woocommerce->show_messages();
    }
else if ( $woocommerce->cart->cart_contents_total >= 500 ) {
        $woocommerce->cart->add_discount( $coupon_code10 );
        $woocommerce->show_messages();
    }
else if ( $woocommerce->cart->cart_contents_total >= 200 ) {
        $woocommerce->cart->add_discount( $coupon_code5 );
        $woocommerce->show_messages();
    }
}

avatar de usuario
doble agudo

Para eliminar un solo cupón del carrito usando su código de cupón, use WC_Cart->remove_coupon( $code ).

Para eliminar todos los cupones del carrito que usaría WC_Cart->remove_coupons( $type )$type por defecto a null para todos, pasar en “carrito” para retirar los cupones antes de impuestos, “pedir” para los cupones después de impuestos.

Para obtener todos los cupones en el carrito como un array puede recorrer y, opcionalmente, eliminar, usar WC_Cart->get_coupons().

foreach ( WC()->cart->get_coupons() as $code => $coupon ){
   $valid = ? // decide to remove or not
   if ( ! $valid ){
       WC()->cart->remove_coupon( $code );
   }
}

  • La eliminación del cupón funcionó para mí, pero el total descontado aún permanece. ¿Cómo se actualizan los totales del carrito a través de Ajax?

    – nickstaw

    14 de noviembre de 2018 a las 18:32

  • @nickstaw poner WC()->cart->calculate_totals(); después WC()->cart->remove_coupon( $code ); esto recalculará los totales del carrito

    – DHL17

    24 de octubre de 2019 a las 10:16


avatar de usuario
eric jorgensen

El método del carrito remove_coupons() se ha actualizado desde entonces, de modo que ya no se requiere un tipo. Ahora, para eliminar todos los cupones, esto funcionará:

WC()->cart->remove_coupons();

Para obtener más información, consulte la documentación de la clase WC_Cart aquí.

  • ¡Gracias! No sabia de este 🙂

    -Rens Tillmann

    11 mayo 2016 a las 16:47


  • Al usar este método, descubrí que, aunque eliminó todos los cupones existentes que se aplicaron al carrito, no volvió a calcular el precio.

    – WongKongPhooey

    11 de diciembre de 2019 a las 15:14

¿Ha sido útil esta solución?