Het wel of niet verplicht maken van checkout velden lijkt heel sterk op het verwijderen van checkout velden. Stel, dat we de bedrijfsnaam verplicht willen maken, omdat we uitsluitend B2B handelen. Dan ziet de code voor het verplicht maken van dat veld er als volgt uit (ervan uitgaand, dat we zowel het factuur- als verzendadres verplicht willen stellen).
<?php
add_filter( 'woocommerce_checkout_fields' , 'wxp_require_woo_checkout_fields' );
function wxp_require_woo_checkout_fields( $fields ) {
$fields['billing']['billing_company']['required'] = true;
$fields['shipping']['shipping_company']['required'] = true;
return $fields;
}
Het spreekt voor zich, dat je andere velden verplicht kan maken door dezelfde namen te gebruiken, als je in het voorbeeld van het verwijderen van velden ziet.
Deze code zal prima werken, maar we kunnen hem iets mooier maken. En voor dat ‘mooier maken’ wil ik je een klein beetje meer uitleggen, hoe WordPress (en daarmee ook WooCommerce) intern werkt.
Om WordPress ‘op maat te maken’, kent WordPress zogenaamde ‘hooks’. Een ‘hook’ is een punt in het programma, waar WordPress eigenlijk vraagt: ‘Wil iemand nog iets veranderen aan wat ik ga doen’?
En WordPress kent hierbij een tweetal verschillende soorten hooks. ‘Action hooks’ en ‘Filter hooks’. Het verschil tussen een action hook en een filter hook is dat een action hook een actie uitvoert. En na het uitvoeren van de actie is die hook ook klaar. Een filter hook wijzigt de informatie die WordPress wil gaan tonen.
Daarom krijgt de functie hierboven ook een $fields parameter mee. In de functie veranderen we die $fields parameter en geven die weer netjes -veranderd- terug aan de functie.
In het voorbeeld van het verwijderen van velden en in het voorbeeld van het verplicht maken van velden veranderen we iets aan die velden. Er is geen enkele reden, waarom we dat niet in één functie zouden kunnen doen. Sterker nog, het is veel beter om dat te doen.
Dus laten we eens naar een voorbeeld kijken, waar we een veld verwijderen (‘state’) voor zowel het verzend- als het factuuradres en de bedrijfsnaam voor verzend- en factuuradres verplicht stellen.
Omdat we logische functienamen willen gebruiken, noemen we ze natuurlijk niet ‘wxp_require_woo_checkout_fields’ of ‘wxp_remove_woo_checkout_fields’ maar iets als ‘wxp_config_woo_checkout_fields’.
<?php
add_filter( 'woocommerce_checkout_fields' , 'wxp_config_woo_checkout_fields' );
function wxp_config_woo_checkout_fields( $fields ) {
//First billing
$fields['billing']['billing_company']['required'] = true;
unset($fields['billing']['billing_state']);
//then shipping
$fields['shipping']['shipping_company']['required'] = true;
unset($fields['shipping']['shipping_state']);
}
In deze functie gaan we dus alles bijhouden wat we aan de checkout fields willen aanpassen. In de toekomst zal ik je bijvoorbeeld ook laten zien, hoe je een extra veld kan toevoegen.