Fügen Sie ein kostenloses Produkt hinzu, wenn ein bestimmter Gutschein in WooCommerce angewendet wird

Lesezeit: 2 Minuten

Benutzer-Avatar
AdrianV

Ich kann ein Produkt in den Warenkorb legen, wenn ein bestimmter Gutschein über verwendet wird woocommerce_applied_coupon Haken und die add_to_cart() Funktion

add_action('woocommerce_applied_coupon', 'apply_product_on_coupon');
function apply_product_on_coupon( ) {
    global $woocommerce;
    $coupon_id = 'mybday';
    $free_product_id = 131468;

    if(in_array($coupon_id, $woocommerce->cart->get_applied_coupons())){
        $woocommerce->cart->add_to_cart($free_product_id, 1);
    }
}

Meine Frage: Gibt es eine Möglichkeit, es in derselben Callback-Funktion auch auf 0 zu reduzieren?

Benutzer-Avatar
7uc1f3r

Ihr aktueller Code enthält einige Fehler oder könnte optimiert werden:

  • global $woocommerce kann ersetzt werden durch WC()
  • $woocommerce->cart->get_applied_coupons() ist nicht notwendig, da der eingelöste Coupon an die Callback-Funktion weitergegeben wird.

Verwenden Sie stattdessen das letzte verfügbare Argument in WC_Warenkorb::add_to_cart() -Methode, mit der Sie benutzerdefinierte Warenkorbartikeldaten hinzufügen können. Dann können Sie diese Daten einfach aus dem Warenkorbobjekt abrufen.

Sie erhalten also:

function action_woocommerce_applied_coupon( $coupon_code ) {
    // Settings
    $product_id = 131468;
    $quantity = 1;
    $free_price = 0;
    $coupon_codes = array( 'coupon1', 'mybday' );

    // Compare
    if ( in_array( $coupon_code, $coupon_codes ) ) {
        // Add product to cart
        WC()->cart->add_to_cart( $product_id, $quantity, 0, array(), array( 'free_price' => $free_price ) );
    }
}
add_action( 'woocommerce_applied_coupon', 'action_woocommerce_applied_coupon', 10, 1 );

// Set free price from custom cart item data
function action_woocommerce_before_calculate_totals( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;

    // Loop through cart contents
    foreach ( $cart->get_cart_contents() as $cart_item ) {       
        if ( isset( $cart_item['free_price'] ) ) {
            $cart_item['data']->set_price( $cart_item['free_price'] );
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'action_woocommerce_before_calculate_totals', 10, 1 );

Notiz: zusätzlich zu verwenden woocommerce_applied_couponmüssen Sie ebenfalls verwenden woocommerce_removed_coupon denn wenn der Coupon entfernt wird, wird auch das Produkt entfernt

function action_woocommerce_removed_coupon( $coupon_code ) {
    // Settings
    $product_id = 131468;
    $coupon_codes = array( 'coupon1', 'mybday' );

    // Compare
    if ( in_array( $coupon_code, $coupon_codes ) ) {
        // Loop through cart contents
        foreach ( WC()->cart->get_cart_contents() as $cart_item_key => $cart_item ) {
            // When product in cart
            if ( $cart_item['product_id'] == $product_id ) {
                // Remove cart item
                WC()->cart->remove_cart_item( $cart_item_key );
                break;
            }
        }
    }
}
add_action( 'woocommerce_removed_coupon', 'action_woocommerce_removed_coupon', 10, 1 );

1016540cookie-checkFügen Sie ein kostenloses Produkt hinzu, wenn ein bestimmter Gutschein in WooCommerce angewendet wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy