WooCommerce结帐自定义字段条件验证 [英] WooCommerce checkout custom field conditional validation

查看:97
本文介绍了WooCommerce结帐自定义字段条件验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将自定义字段保存到新的用户元.我的自定义字段= T.C.Kimlik否

代码行开头的功能是将字段添加到成员资格部分.

我要做的主要事情是自动打开我的自定义区域,该区域位于注册用户的结帐页面时,由我控制在顶部

 /** TC Kimlik No Ekleme **/add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');函数custom_override_checkout_fields($ fields){$ fields ['billing'] ['shipping_tc'] = array('标签'=>__('TC Kimlik No','woocommerce'),'占位符'=>_x('FaturaİçinGerekli','placeholder','woocommerce'),'required'=>真的,'class'=>array('form-row-wide'),'清除'=>真的);返回$ fields;}/** TCDoğrula**/函数isTcKimlik($ tc){if(strlen($ tc)< 11){返回false;}if($ tc [0] =='0'){返回false;}$ plus =($ tc [0] + $ tc [2] + $ tc [4] + $ tc [6] + $ tc [8])* 7;$ minus = $ plus-($ tc [1] + $ tc [3] + $ tc [5] + $ tc [7]);$ mod = $减去%10;if($ mod!= $ tc [9]){返回false;}$ all ='';for($ i = 0; $ i< 10; $ i ++){$ all + = $ tc [$ i];}if($ all%10!= $ tc [10]){返回false;}返回true;}/** TC Kimlik NoyuDoğrula**/add_action('woocommerce_checkout_process','my_custom_checkout_field_process');函数my_custom_checkout_field_process(){$ tcno = $ _POST ['shipping_tc'];if(!isTcKimlik($ tcno))wc_add_notice(__('LütfenGeçerliTC Kimlik No Girin.'),'error');}/**管理员SiparişDetayındaFatura Bilgilerinde TC No'yuGörebilmesiİçin**/add_action('woocommerce_admin_order_data_after_billing_address','my_custom_checkout_field_display_admin_order_meta',10,1);函数my_custom_checkout_field_display_admin_order_meta($ order){echo'< p>< strong>'.__('TC Kimlik No').':</strong>'.get_post_meta($ order-> get_id(),'_shipping_tc',true).'</p>';}add_filter('woocommerce_checkout_fields','misha_email_first');函数misha_email_first($ checkout_fields){$ checkout_fields ['billing'] ['shipping_tc'] ['priority'] = 20;返回$ checkout_fields;}//自定义功能,将帐单地址"表单显示到注册页面add_action('woocommerce_register_form_start','zk_add_billing_form_to_registration');函数zk_add_billing_form_to_registration(){$ checkout = WC()-> checkout;foreach($ checkout-> get_checkout_fields('billing')as $ key => $ field):if($ key!='billing_email')woocommerce_form_field($ key,$ field,$ checkout-> get_value($ key));endforeach;}//自定义功能可保存Usermeta或注册用户的帐单地址add_action('woocommerce_created_customer','zk_save_billing_address');函数zk_save_billing_address($ user_id){$ address = $ _POST;foreach($ address as $ key => $ field){//仅帐单字段值if(strpos($ key,'billing_')!== false){//将名字和姓氏添加到用户元表的条件if($ key =='billing_first_name'|| $ key =='billing_last_name'){$ new_key = str_replace('billing_','',$ key);update_user_meta($ user_id,$ new_key,$ _POST [$ key]);}update_user_meta($ user_id,$ key,$ _POST [$ key]);}}}add_action('woocommerce_checkout_update_user_meta','reigel_woocommerce_checkout_update_user_meta',10,2);//检查&验证注册表单中的其他字段.add_action('woocommerce_register_post','zk_validation_billing_address',10,3);函数zk_validation_billing_address($ username,$ email,$ validation_errors){foreach($ _POST as $ key => $ field)://验证:必填字段if(strpos($ key,'billing_')!== false){if($ key =='billing_country'&& empty($ field)){$ validation_errors-> add($ key .'_ error',__('Lütfenülkeseçimiyapınız.','woocommerce'));}if($ key =='billing_first_name'&& empty($ field)){$ validation_errors-> add($ key .'_ error',__('Adınızıgiriniz.','woocommerce'));}if($ key =='billing_last_name'&& empty($ field)){$ validation_errors-> add($ key .'_ error',__('Soyadınızıgiriniz.','woocommerce'));}if($ key =='billing_address_1'&& empty($ field)){$ validation_errors-> add($ key .'_ error',__('Adresinizi giriniz.','woocommerce'));}if($ key =='billing_city'&& empty($ field)){$ validation_errors-> add($ key .'_ error',__('Lütfenşehirseçimiyapınız.','woocommerce'));}if($ key =='billing_state'&& empty($ field)){if(count(WC()-> countries-> get_states($ _ POST ['billing_country']))> 0)$ validation_errors-> add($ key .'_ error',__('Mahallegirişiyapınız.','woocommerce'));}if($ key =='billing_postcode'&& empty($ field)){$ validation_errors-> add($ key .'_ error',__('Posta kodugirişiyapınız.','woocommerce'));}/*if($ key =='billing_email'&& empty($ field)){$ validation_errors-> add($ key .'_ error',__('请输入账单电子邮件地址.','woocommerce'));}*/if($ key =='billing_phone'&& empty($ field)){$ validation_errors-> add($ key .'_ error',__('Lütfentelefonnumaranızıgiriniz.','woocommerce'));}if($ key =='shipping_tc'&& empty($ field)){$ validation_errors-> add($ key .'_ error',__('TC.','woocommerce'));}}endforeach;}add_filter('woocommerce_billing_fields','sv_required_billing_fields');函数sv_required_billing_fields($ fields){$ fields ['billing_phone'] ['required'] = true;$ fields ['billing_city'] ['required'] = true;$ fields ['billing_country'] ['required'] = true;$ fields ['billing_address_1'] ['required'] = true;返回$ fields;} 

解决方案

根据您的其他问题回答 解决方案

Based on your other question answer Save WooCommerce checkout custom field as user meta data, that solves saving field data as user meta data and order meta data.

Now for field validation you will use:

function is_billing_identifier_valid( $tc ){
    if (strlen($tc) < 11 || $tc[0] == '0') 
        return false;
    
    $plus  = ($tc[0] + $tc[2] + $tc[4] + $tc[6] + $tc[8]) * 7;
    $minus = $plus - ($tc[1] + $tc[3] + $tc[5] + $tc[7]);
    $all   = ''; 
    
    if ( $minus % 10 != $tc[9])
        return false;
    
    for ($i = 0 ; $i < 10 ; $i++) 
        $all += $tc[$i];
    
    return $all % 10 != $tc[10] ? false : true;
}

add_action('woocommerce_checkout_process', 'custom_checkout_field_validation');
function custom_checkout_field_validation() {
    if( isset($_POST['billing_identifier']) && ! is_billing_identifier_valid( esc_attr($_POST['billing_identifier']) ) ) {
        wc_add_notice( __( 'Lütfen Geçerli TC Kimlik No Girin.' ), 'error' );
    }
}

Code goes in functions.php file of the active child theme (or active theme). It should works.

这篇关于WooCommerce结帐自定义字段条件验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆