Heim  >  Fragen und Antworten  >  Hauptteil

Vermeiden Sie die Verwendung von Gutscheinen, wenn Sie die Abholung vor Ort als Lieferoption wählen

Ich habe den Code verwendet, um Rabatte im Warenkorb und bei der Auswahl von „Abholung vor Ort“ an der Kasse hinzuzufügen.

/**
* Discount for Local Pickup
*/
add_action( 'woocommerce_cart_calculate_fees', 'custom_discount_for_pickup_shipping_method', 10, 1 );
function custom_discount_for_pickup_shipping_method( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $percentage = 15; // Discount percentage

    $chosen_shipping_method_id = WC()->session->get( 'chosen_shipping_methods' )[0];
    $chosen_shipping_method    = explode(':', $chosen_shipping_method_id)[0];

    // Only for Local pickup chosen shipping method
    if ( strpos( $chosen_shipping_method_id, 'local_pickup' ) !== false ) {

        // Set variable
        $new_subtotal = 0;

        // Loop though each cart items and set prices in an array
        foreach ( $cart->get_cart() as $cart_item ) {

            // Get product
            $product = wc_get_product( $cart_item['product_id'] );

            // Product has no discount
            if ( ! $product->is_on_sale() ) {
                // line_subtotal
                $line_subtotal = $cart_item['line_subtotal'];

                // Add to new subtotal
                $new_subtotal += $line_subtotal;
            }
        }

        // Calculate the discount
        $discount = $new_subtotal * $percentage / 100;

        // Add the discount
        $cart->add_fee( __('Discount') . ' (' . $percentage . '%)', -$discount );
    }
}

Ich habe auch ein paar Gutscheine erstellt. Wie ändere ich diesen Code, um alle Gutscheine von der Berechnung auszuschließen, wenn ich „Abholung vor Ort“ auswähle?

Wie zeige ich eine Benachrichtigung an, dass der Coupon nicht funktioniert, wenn „Abholung vor Ort“ ausgewählt ist?

Ich freue mich über deine Hilfe!

P粉930534280P粉930534280223 Tage vor469

Antworte allen(1)Ich werde antworten

  • P粉517475670

    P粉5174756702024-04-03 15:36:26

    // Add Percentage Discount to Local Pickup in Woocommerce
    function local_pickup_discount($cart) {
    
        $applied_coupons = WC()->cart->get_applied_coupons();
        $chosen_methods = WC()->session->get('chosen_shipping_methods');
        $chosen_shipping_no_ajax = $chosen_methods[0];
        if (empty($applied_coupons)) {
    
            if (0 === strpos($chosen_shipping_no_ajax, 'local_pickup')) {
                $discount = $cart->subtotal * 0.15; // Set your percentage. This here gives 15% discount
                $cart->add_fee(__('Discount added', 'yourtext-domain'), -$discount); // Change the text if needed
            }
        }
    
        if (0 === strpos($chosen_shipping_no_ajax, 'local_pickup') && !empty($applied_coupons)) {
            foreach ($applied_coupons as $key => $coupon) {
                WC()->cart->remove_coupon($coupon);
            }
            wc_add_notice(__('Coupon will not work for local pickup'), 'error');
        }
    }
    
    add_action('woocommerce_cart_calculate_fees', 'local_pickup_discount');

    使用 WooCommerce 6.4 测试正常

    Antwort
    0
  • StornierenAntwort