Comprobar si el cupón se aplica en woo commerce

3 minutos de lectura

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 )

  • ¿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

avatar de usuario
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);
}

¿Ha sido útil esta solución?