Prüfen Sie, ob WooCommerce address_field_1 die Hausnummer enthält, bevor Sie die Bestellung bearbeiten

Lesezeit: 2 Minuten

Benutzer-Avatar
Marco v

Manchmal muss der Kunde in WooCommerce den Straßennamen und die Hausnummer in einem einzigen Feld ausfüllen.

In diesem Fall möchten wir dann das Checkout-Feld billing_address_1 WooCommerce validieren, um zu prüfen, ob es Zahlen enthält, bevor die Bestellung bearbeitet wird. Wir haben eine Reihe von Methoden ausprobiert, um dies zu erreichen, aber ohne Erfolg.

Diese Standard-WooCommerce-Methode funktioniert nicht:

add_action('woocommerce_checkout_process', 'custom_checkout_field_check');

    function custom_checkout_field_check() {
        // Check if set, if its not set add an error.
        if ( $_POST['billing_address_1'] && strpbrk($_POST['billing_address_1'], '1234567890') )
            wc_add_notice( __( 'Het adresveld moet minimaal een huisnummer bevatten' ), 'error' );
    }

Diese geben bool(false) auf der Checkout-Seite zurück:

var_dump($_POST['billing_address_1'] == true);
var_dump($_POST['billing_address_2'] == true);
var_dump($_POST['billing_postcode'] == true);
var_dump($_POST['billing_email'] == true);

Diese Front-End-Problemumgehung funktioniert nicht.

document.querySelector("#place_order").addEventListener("click", validateAddressField);

function validateAddressField () {
    console.log('Okay dan!');
}

Was kann ich noch versuchen, um sicherzustellen, dass die Validierung stattfindet, bevor die Bestellung bearbeitet wird?

  • Sie sollten Ihre andere ähnliche Frage löschen … da es sich um ein Duplikat dieser Frage handelt.

    – LoicTheAztec

    25. April 2017 um 6:39 Uhr

    // Check if address field contains house number otherwise provide error message

    add_action( 'woocommerce_after_checkout_validation', 'validate_checkout', 10, 2); 

    function validate_checkout( $data, $errors ){ 
        if (  ! preg_match('/[0-9]/', $data[ 'billing_address_1' ] ) ){ 
            $errors->add( 'address', 'Sorry, but the address you provided does not contain a house number.' ); 
        }
    }

Benutzer-Avatar
LoicTheAztec

Das funktioniert in deinem Code nicht richtig: strpbrk($_POST['billing_address_1'], '1234567890').
Die PHP-Funktion preg_match() ist hier eher angebracht.

Also habe ich einige kleine Änderungen in Ihrem Code vorgenommen, damit es so funktioniert, wie Sie es erwarten:

add_action('woocommerce_checkout_process', 'address_field_validation', 10, 0);
function address_field_validation() {

    // The field value to check
    $post_value = $_POST['billing_address_1'];

    // If there is no number in this field value, stops the checkout process
    // and displays an error message.
    if ( $post_value && ! preg_match( '/[0-9]+/', $post_value ) ) {

        // The error message
        throw new Exception( sprintf( __( 'Het adresveld moet minimaal een huisnummer bevatten', 'woocommerce' ) ) );
    }
}

Dieser Code ist getestet und funktioniert auf den WooCommerce-Versionen 2.6.x und 3.0+…

*Dieser Code wird in die function.php-Datei Ihres aktiven Child-Themes (oder Themes) oder auch in jede Plugin-Datei eingefügt.


Bezug: WC_Checkout – Quellcode von process_checkout()

  • Vielen Dank, Sir, für Ihre Bemühungen, obwohl ich eine Lösung vom WooCommerce-Team gefunden habe. Ich werde es als Antwort hinzufügen.

    – Marco v

    25. April 2017 um 8:31 Uhr

Sie können versuchen, Hook zu verwenden: – woocommerce_after_checkout_validation

Bitte lesen Sie, wie Sie diesen Hook und Beispielcode verwenden hier

Lassen Sie mich wissen, wenn Sie noch etwas brauchen …

  • Dies ist keine vollständige Antwort

    – Nathan Dawson

    25. April 2017 um 0:59 Uhr

1154530cookie-checkPrüfen Sie, ob WooCommerce address_field_1 die Hausnummer enthält, bevor Sie die Bestellung bearbeiten

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

Privacy policy