Php WooCommerce用户注册-禁用无状态的国家/地区的状态验证

Php WooCommerce用户注册-禁用无状态的国家/地区的状态验证,php,validation,woocommerce,Php,Validation,Woocommerce,我在WooCommerce登记表中添加了额外的登记字段。这些字段中包括州和国家的字段 以下是我获取表单中状态字段的方式: $field = [ 'type' => 'state', 'label' => 'State', 'required' => 1, 'class' => ['address-field form-row-first'], 'validate' => ['state'] ]; woocommerce_for

我在WooCommerce登记表中添加了额外的登记字段。这些字段中包括州和国家的字段

以下是我获取表单中状态字段的方式:

$field = [
    'type' => 'state',
    'label' => 'State',
    'required' => 1,
    'class' => ['address-field form-row-first'],
    'validate' => ['state']
];
woocommerce_form_field( 'billing_state', $field, '' );
状态字段的验证使用以下代码段完成:

if (isset($_POST['billing_state']) && empty($_POST['billing_state']) ) { 
    $validation_errors->add('billing_state_error', __('Please enter your State', 'woocommerce')); 
}
验证工作正常,但我注意到,当选择荷兰这样的国家时,state字段将消失,因为荷兰没有任何国家。这是可以的,但是当我单击“注册”按钮时,状态验证仍然运行,即使该字段不再存在


如果某个字段被隐藏,有人知道我需要做什么更改才能跳过该字段的验证吗?谢谢。

以下几点就可以了:

//注意:我假设country字段的“name”是billing\u country。如果没有,就改变它。
$country=wc_clean(wp_unslash($_POST['billing_country'));
//您应该在此处对所选国家/地区进行验证。。。
$states=WC()->countries->get_states($country);
$state=wc_clean(wp_unslash($_POST['billing_state']);
if(is_数组($states)&空($states)){
//所选国家/地区中没有州,因此不执行任何操作。
}elseif(is_数组($states)&&!isset($states[$state])){
//未选择任何状态或该状态无效。
$validation\u errors->add('invalid\u billing\u state','请选择有效状态');
}elseif(空($状态)){
//对于某些国家,如新喀里多尼亚,应手动键入状态。
$validation\u errors->add('empty\u billing\u state','请输入有效状态');
}

参考:。

在这种情况下,您需要检查该字段是否隐藏

$(element).is(":hidden"); 
然后从该字段中删除required

$("#billing_state").removeAttr("required");
在您的情况下,您还需要

var form = $('#my_form_id').get(0);
$.removeData(form,'validator');

非常感谢@Sally CJ!!这成功了!我正在查看同一个文件,但我没有从数组中获取单个状态并检查是否设置了该状态。我还要再等20个小时才能给你赏金。我很高兴它成功了,并提前感谢你的赏金!:)谢谢@Pranav,但我正在寻找PHP验证。对不起,我的问题没有说清楚。