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();
}
}
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ésWC()->cart->remove_coupon( $code );
esto recalculará los totales del carrito– DHL17
24 de octubre de 2019 a las 10:16
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