Het adres-veld van de WooCommerce checkout is een standaard tekst veld. Je kan er eender welke input in kwijt.
En WooCommerce zelf controleert niet welke tekst precies ingegeven wordt.
Kortom: als je koper per ongeluk het busnummer vergeet in te vullen dan heb je een probleem. Althans, een administratief probleem. Je zal de koper even moeten contacteren voor de nodige gegevens.
Een custom busnummer veld al oplossing?
In principe kan dit eenvoudig toegevoegd worden met de extensie WooCommerce Checkout Editor (link naar wp.org). Maar hiermee stap je af van standaard WooCommerce-gedrag. In het overzicht van de bestelling staat de busnummer op een andere plek.
Daarnaast is je website dan ook niet meer compatibel met andere plugins of diensten die te maken hebben met verzendingen, bijvoorbeeld SendCloud of het afprinten van labels. De plugin van SendCloud exporteert enkel het standaard adresveld naar zijn omgeving, niet het nieuwe custom busnummer-veld. Ook je label plugin zal niet meteen dat busnummer veld terugvinden.
Uiteraard: je kan de code van SendCloud en die label plugin wel hercoderen; maar duurzaam is het niet perse.
Dus nee, deze oplossing is niet ideaal.
Oplossing: het adres-veld checken op een nummer
Bij WOOFERS gaan we er altijd uit van: hoe blijven we zo dicht mogelijk bij de standaarden en WooCommerce-core.
Denk niet te snel aan custom zaken. Bekijk eerst hoe we dit vanuit core kunnen aanpakken.
Zulke denkwijze houdt je website performant en duurzaam.
Het adresveld heeft het id “billing_addres_1”; dat zoeken we op en sleuren we doorheen een PHP-functie die nakijkt of er cijfers in staan. Indien er geen cijfers inzitten, dan krijgt m’n een foutmelding en kan m’n de bestelling niet afronden.
Met andere woorden: de foutmarge op het vergeten van de busnummer wordt wel heel klein.
// 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', 'Het adresveld bevat geen huisnummer of busnummer.' );
}
}
De foutmelding ziet er zo uit: