Passen Sie ein Checkout-Feld an, wenn in WooCommerce Gutscheine angewendet werden

Lesezeit: 4 Minuten

Passen Sie ein Checkout Feld an wenn in WooCommerce Gutscheine angewendet
mbprouser

Das Checkout-Feld für Bestellnotizen muss kontrolliert werden, wenn ein Gutschein in Woocommerce angewendet wird: Ich habe dies ohne Erfolg versucht.

add_action('woocommerce_applied_coupon', 'apply_product_on_coupon');
function apply_product_on_coupon( ) {
    if (WC()->cart->has_discount('test')) {
        $fields['billing']['billing_customer_note']['placeholder'] = 'You can have up to three initials';
        $fields['billing']['billing_customer_note']['label'] = 'Personalise your Tote bag';
        $fields['billing']['billing_customer_note']['required'] = true;
        $fields['billing']['billing_customer_note']['input_class'] = array('tote-bag');
    }
    return $fields;
}

Ich weiß, dass das $fields-Bit funktioniert, da ich es in einem anderen Szenario verwendet habe. Wenn wir davon ausgehen, dass der Gutscheincode “Test” ist, müssen die Bestellhinweise obligatorisch sein, die Beschriftung und der Platzhalter geändert und einige zusätzliche CSS-Klassen angewendet werden.

Irgendwelche Vorschläge?

  • Der Code von Team Dolphin wird nicht richtig verwendet, da jedes Mal, wenn der Kunde einen Gutschein an der Kasse hinzufügt oder entfernt, die Seite neu geladen wird (und der Kunde alle eingegebenen Daten verliert). Das Feld wird auch nicht als Pflichtfeld validiert, wenn der Kunde versucht, eine Bestellung aufzugeben, ohne Bestellnotizen auszufüllen, wenn ein Gutschein angewendet wird.

    – LoicTheAztec

    19. März 21 um 15:36 Uhr


1643907546 546 Passen Sie ein Checkout Feld an wenn in WooCommerce Gutscheine angewendet
Team Delphin

Bitte versuchen Sie es mit diesem Code. Fügen Sie diesen Code in die Datei functions.php Ihres aktiven Designs ein.

Sommer ist Gutscheincodename. durch den Namen Ihres Gutscheincodes ersetzen

add_filter('woocommerce_checkout_fields', 'xa_remove_billing_checkout_field');
function xa_remove_billing_checkout_field($fields) {
    global $woocommerce;
    if (!empty(WC()->cart->applied_coupons)){
        if (in_array("summer", WC()->cart->applied_coupons)) {
            $fields['order']['order_comments']['required'] = true;
            $fields['order']['order_comments']['placeholder'] ='custom placeholder';
            $fields['order']['order_comments']['label'] = 'custom label';   
            $fields['order']['order_comments']['input_class'] = array('tote-bag');
        }
    }
    return $fields;
}

Hoffnung ist nützlich für Sie. Danke

AKTUALISIEREN

Wenn Sie den Gutschein aus der Kasse entfernen, aktualisieren Sie die Seite.

function action_woocommerce_removed_coupon( $coupon_code ) { 
    if ($coupon_code == "summer") { ?>
        <script>location.reload();</script>
    <?php }
};
add_action( 'woocommerce_removed_coupon', 'action_woocommerce_removed_coupon', 10, 1 );

  • Fast. Ich musste meinen Code verwenden, um die Bestellnotizen anzuzeigen, aber die Bedingung funktioniert so, wie ich es brauche. Das heißt, wenn ich den Gutschein entferne, werden die Änderungen nicht entfernt. Irgendwelche Ideen?

    – mbprouser

    19. März 21 um 12:05 Uhr

  • Es funktioniert, wenn Sie den Coupon aus dem Warenkorb entfernen

    – Team Delphin

    19. März 21 um 12:16 Uhr

Passen Sie ein Checkout Feld an wenn in WooCommerce Gutscheine angewendet
LoicTheAztec

Da der Kunde einen Gutschein auf der Checkout-Seite hinzufügen oder entfernen kann, sind jQuery und Php erforderlich.

Nur wenn ein Gutscheincode auf die Bestellung angewendet wird, macht der folgende Code das Bestellanmerkungsfeld zur Kasse erforderlich, ändert seine Beschriftung und seinen Platzhalter und fügt Tragetasche als Auswahlklasse zum Textfeld-Eingabefeld hinzu. Es übernimmt die Validierung, wenn das Feld erforderlich ist.

Verwenden Sie stattdessen den folgenden Code:

add_filter('woocommerce_before_checkout_form', 'custom_order_notes_checkout_fields_js');
function custom_order_notes_checkout_fields_js($fields) {
    // Here below set your custom order notes attributes (when a coupon is applied)
    $field_label = __('custom label');
    $placeholder = __('custom placeholder');
    $label="tote-bag";

    $required    = '<abbr class="required" title="required">*</abbr>';

    wc_enqueue_js( "jQuery(function($){
        var required     = '".$required."',
            label="".$field_label."",
            placeholder="".$placeholder."",
            input_class="".$input_class."",
            class_requ   = 'validate-required',
            class_valid  = 'woocommerce-validated',
            class_unval="woocommerce-invalid woocommerce-invalid-required-field",
            notesPara="#order_comments_field",
            notesLabel   = notesPara+' label',
            notesText    = notesPara+' textarea',
            defaultLabel = $(notesText).html(),
            defaultPHold = $(notesText).attr('placeholder'),
            newLabel     = label+'&nbsp'+required;

            console.log(defaultPHold);

        if( $('tr.cart-discount').length > 0 ) {
            $(notesPara).addClass(class_requ).addClass(class_valid);
            $(notesLabel).html(newLabel);
            $(notesText).attr('placeholder', placeholder);
        }

        // On order notes change
        $(document.body).on('change input', notesText, function(){
            if( $('tr.cart-discount').length > 0 ) {
                if( $(this).val() != '' ) {
                    $(notesPara).removeClass(class_unval);
                    if ( ! $(notesPara).hasClass(class_valid) ) {
                        $(notesPara).addClass(class_valid);
                    }
                } else {
                    $(notesPara).removeClass(class_valid);
                    if ( ! $(notesPara).hasClass(class_unval) ) {
                        $(notesPara).addClass(class_unval);
                    }
                }
            }
        });

        // On coupon change
        $(document.body).on('updated_checkout', function(){
            if( $('tr.cart-discount').length > 0 ) {
                if( ! $(notesPara).hasClass(class_requ) ) {
                    $(notesPara).addClass(class_requ).addClass(class_valid);
                    $(notesLabel).html(newLabel);
                    $(notesText).addClass(input_class);
                    $(notesText).attr('placeholder', placeholder);
                }
            } else {
                if( $(notesPara).hasClass(class_requ) ) {
                    $(notesPara).removeClass(class_requ).removeClass(class_valid).removeClass(class_unval);
                    $(notesLabel).html(defaultLabel);
                    $(notesText).addClass(input_class);
                    $(notesText).attr('placeholder', defaultPHold);
                }
            }
        });
    });");
}

// Enable "Order notes" field validation for applied coupons
add_filter('woocommerce_checkout_process', 'validation_checkout_required_order_comments');
function validation_checkout_required_order_comments() {
    $applied_coupons = WC()->cart->get_applied_coupons();
    if ( ! empty($applied_coupons) && isset($_POST['order_comments']) && strlen($_POST['order_comments']) < 3 ) {
        wc_add_notice( __("Order comments is a required custom field whan a coupon is applied", "woocommerce"), 'error' );
    }
}

Der Code wird in die Datei functions.php des aktiven untergeordneten Designs (oder aktiven Designs) eingefügt. Getestet und funktioniert.

  • Danke @LoicTheAztec – wo sucht Ihr Code nach dem Gutscheinnamen?

    – mbprouser

    24. März 21 um 9:58 Uhr

.

757800cookie-checkPassen Sie ein Checkout-Feld an, wenn in WooCommerce Gutscheine angewendet werden

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

Privacy policy