Woocommerce logo

Aplicar un cupón al carrito mediante programación

01/12/2020 Blog

¿Necesitas que un cupón se añada directamente al carrito?, ¿quieres que se aplique directamente cuando el carrito tenga determinados productos?

Desconozco si se puede hacer mediante plugin, la verdad, siempre soy partidario de instalar la menor cantidad de plugins posible. La opción que suelo utilizar es meter el siguiente action al tema personalizado o tema hijo. Incluso a un plugin personalizado, porqué no.

add_action( 'woocommerce_before_cart', 'aplicar_cupon_turismo' );
/**
 * Aplica a todos los productos el cupón con código CODIGO_CUPON
 */
function aplicar_cupon_turismo() {
    // Código del cupón
    $codigo_cupon = 'CODIGO_CUPON';
    // Asegura que el código no esté aplicado ya el carrito
    if ( WC()->cart->has_discount( $codigo_cupon ) ) return;

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        
        // Aplica el cupón al carrito
        WC()->cart->apply_coupon( $codigo_cupon );
        // Muestra el mensaje de "Cupón aplicado..."
        wc_print_notices();
    }

}

Puede ser que sólo necesitemos que el cupón sólo se aplique a unos productos en concreto. Por ejemplo a los de id XXX e YYY. Este sería entonces el código explicado:

add_action( 'woocommerce_before_cart', 'aplicar_cupon_turismo' );
/**
 * Aplica a los productos con id XXX y YYY el cupón con código CODIGO_CUPON
 */
function aplicar_cupon_turismo() {
    // Código del cupón
    $codigo_cupon = 'CODIGO_CUPON';
    // Asegura que el código no esté aplicado ya el carrito
    if ( WC()->cart->has_discount( $codigo_cupon ) ) return;

    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        // Array de IDs de productos
        $productos = array( XXX, YYY );

        // Si el producto está en el array ($productos) de productos asociados al cupón
        if ( in_array( $cart_item['product_id'], $productos ) ) {
            // Aplica el cupón al carrito
            WC()->cart->apply_coupon( $codigo_cupon );
            // Muestra el mensaje de "Cupón aplicado..."
            wc_print_notices();
        }

    }

}

Espero que os ayude.