Necesito encontrar una manera de verificar si se aplica un cupón al pago de Woocommerce, si es así, me gustaría hacer algo. He intentado buscar esto y no puedo encontrar una solución.
Aquí hay una versión reducida de lo que estoy intentando:
add_action('woocommerce_before_cart_table', 'apply_product_on_coupon');
function apply_product_on_coupon( ) {
global $woocommerce;
$coupon_id = '12345';
if( $woocommerce->cart->applied_coupons === $coupon_id ) {
echo 'YAY it works';
}
}
Entonces, ¿no es esta la forma correcta de verificar si el cupón existe en el carrito? if( $woocommerce->cart->applied_coupons === $coupon_id )
maiorano84
De su ejemplo, algo como esto podría funcionar. Esto no se ha probado, pero debería darte un paso en la dirección correcta:
add_action('woocommerce_applied_coupon', 'apply_product_on_coupon');
function apply_product_on_coupon( ) {
global $woocommerce;
$coupon_id = '12345';
$free_product_id = 54321;
if(in_array($coupon_id, $woocommerce->cart->get_applied_coupons())){
$woocommerce->cart->add_to_cart($free_product_id, 1);
}
}
-
Aquí está la documentación sobre el Clase de carrito
– maiorano84
20 de noviembre de 2013 a las 16:25
-
Si alguien está interesado, WC_Cart::get_applied_coupons() devuelve una matriz de cadenas de código de cupón, esto no está claro en los documentos.
– Rafark
9 de noviembre de 2021 a las 2:39
global $woocommerce;
if (!empty($woocommerce->cart->applied_coupons))
{
//print_r($woocommerce->cart->applied_coupons); - keys of coupons here
}
Esto podría ser un problema de edad, pero una solución fácil es usar
WC()->cart->applied_coupons
Esta matriz devuelve listas de cupones aplicados, luego puede usar foreach, for o in_array para verificar los cupones aplicados.
Espero que ayude
Si conoce el código del cupón pero no el ID de la publicación del cupón, puede usar esta combinación de la respuesta de realmag777 y la respuesta de maiorano84.
function CheckCouponIsApplied($cpn_code)
{
global $woocommerce;
$lowercasecouponcode = strtolower($cpn_code); //ENSURE LOWERCASE TO MATCH WOOCOMMERCE NORMALIZATION
return in_array($lowercasecouponcode, $woocommerce->cart->applied_coupons);
}
¿Cuál es el resultado de tu prueba?
– qwertynl
20 de noviembre de 2013 a las 15:53
Bueno, en este ejemplo, si el cupón “12345” se aplica al carrito, se repetirá el “Sí, funciona”. Lo que realmente planeo hacer es agregar un producto gratis al carrito si se aplica el cupón, tengo todo bajo control excepto verificar si se aplica mi cupón.
– Derek
20 de noviembre de 2013 a las 16:13
¿Su prueba realmente hace eco de ‘YAY funciona’?
– maiorano84
20 de noviembre de 2013 a las 16:16
Lo hará una vez que pueda probarlo con el id_coupon, no tengo forma de verificar los cupones aplicados para ver si el cupón ‘12345’ se aplica al carrito o no. El código anterior funcionará si elimino === $coupon_id, pero funciona para todos los cupones aplicados y no para mi cupón específico
– Derek
20 de noviembre de 2013 a las 16:23