在处理订单前检查WooCommerce address_field_1是否包含门牌号码
有时,在WooCommerce中,客户需要在单个字段中填写街道名称和门牌号码。在处理订单前检查WooCommerce address_field_1是否包含门牌号码
在这种情况下,我们希望验证billing_address_1 WooCommerce结帐字段,以在处理订单之前检查它是否包含数字。我们已经尝试了很多方法来完成这个任务,但没有任何运气。
本标准WooCommerce方法不起作用:
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');
}
结帐页面上的这些返回布尔(假):
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);
这前端解决方法不起作用。
document.querySelector("#place_order").addEventListener("click", validateAddressField);
function validateAddressField() {
console.log('Okay dan!');
}
我还有什么可以尝试确保在订单处理之前进行验证?
// 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.');
}
}
这不是一个完整的答案 –
这不是在你的代码中正确工作:strpbrk($_POST['billing_address_1'], '1234567890')
。
他PHP功能preg_match()
在这里比较合适。
所以,我必须让你的代码一些小的修改,使您预期的那样工作:
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')));
}
}
该代码测试和工程上的WooCommerce版本的2.6.x和3.0 + ...
*这段代码进入你的活动子主题(或主题)的function.php文件或者任何插件文件中。
谢谢你的努力,尽管我找到了WooCommerce团队的解决方案。我会加入它作为答案。 – mdarmanin
您应该删除您的其他类似的问题......因为它是这一个的副本。 – LoicTheAztec