【问题标题】:Woocommerce require fieldsWoocommerce 需要字段
【发布时间】:2018-02-21 12:12:48
【问题描述】:
下面是我用来使所有地方的州字段都成为强制性的代码,但对于像德国这样的特定国家/地区,它仍然不是强制性的。我想强制要求所有人。
add_filter( 'woocommerce_checkout_fields', 'custom_override_default_address_fields' );
function custom_override_default_address_fields($fields){
$fields['billing']['state']['required'] = true;
$fields['shipping']['state']['required'] = true;
}
return $fields;
}
【问题讨论】:
标签:
php
wordpress
woocommerce
【解决方案1】:
我发现 WordPress 本身在许多国家(如科威特)删除了必填的 state 字段,并且无法使用它,
$fields['billing']['state']['required'] = true;
$fields['shipping']['state']['required'] = true;
我所做的是,我检查了状态下拉列表中输入值的大小(当用户按下订单按钮时),如果该值为空,则显示错误。
function my_custom_checkout_field_process() {
// You can make your own control here
if ( ! $_POST[ 'billing_state' ] )
{
wc_add_notice( __('PLEASE SELECT A STATE' ), 'error' );
}
}
【解决方案2】:
注意你的代码不正确,去掉多余的'}'。
使用woocommerce_default_address_fields 代替woocommerce_checkout_fields:
add_filter('woocommerce_default_address_fields', 'custom_override_default_address_fields');
function custom_override_default_address_fields( $fields ) {
$fields['state']['required'] = false;
return $fields;
}
如果您有其他过滤器,请尝试添加优先级(优先级为 20 的代码将在优先级为 10 的代码之后运行):
add_filter('woocommerce_default_address_fields', 'custom_override_default_address_fields', 100);
如果你真的需要使用woocommerce_checkout_fields,那么使用billing_state和shipping_state而不是state:
add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields');
function custom_override_checkout_fields( $fields ) {
$fields['billing']['billing_state']['required'] = true;
$fields['shipping']['shipping_state']['required'] = true;
return $fields;
}