如何解决Woocommerce自定义帐户页面初始化操作会在每个页面上显示字段错误
我正在创建自定义woocommerce注册页面。客户可以使用姓名,电子邮件和手机号码创建帐户。这三个字段都是必填字段。
这是我的代码:
add_action('init','devsol_customer_auth_register');
function devsol_customer_auth_register() {
$customer_name = sanitize_text_field( $_POST['reg_billing_name'] );
$customer_phone = sanitize_text_field( $_POST['reg_billing_phone'] );
$customer_email = sanitize_email( $_POST['reg_billing_email'] );
$customer_password = wp_generate_password( 12,false );
$noemail = '';
if (isset( $_POST['reg_billing_name'] ) && empty( $_POST['reg_billing_name'])) {
$GLOBALS['ERROR'] = 'register-name';
}
else if (isset( $_POST['reg_billing_email'] ) && empty( $_POST['reg_billing_email'])) {
$GLOBALS['ERROR'] = 'register-email';
}
else if (email_exists($customer_email)) {
$GLOBALS['ERROR'] = 'register-email-exist';
}
else if (isset( $_POST['reg_billing_phone'] ) && empty( $_POST['reg_billing_phone'])) {
$GLOBALS['ERROR'] = 'register-phone';
}
else if ((!preg_match('/^[0-9]{11}$/D',$_POST['reg_billing_phone'] )) && !empty( $_POST['reg_billing_phone'])) {
$GLOBALS['ERROR'] = 'register-phone-validation';
}
else if (!username_exists($customer_phone)) {
$user_id = wp_create_user($customer_phone,$customer_password,$noemail);
if ( !is_wp_error( $user_id ) ) {
if ( apply_filters( 'woocommerce_registration_auth_new_customer',true,$user_id ) ) {
wc_set_customer_auth_cookie( $user_id );
}
update_user_meta($user_id,'billing_first_name',$customer_name);
update_user_meta($user_id,'billing_email',$customer_email);
update_user_meta($user_id,'billing_phone',$customer_phone);
wp_update_user (array(
'ID' => $user_id,'first_name' => $customer_name,'display_name' => $customer_name,'nickname' => $customer_name,'role' => 'customer',));
}
}
else {
$GLOBALS['ERROR'] = 'duplicate-register';
}
}
我在每个页面上都收到此错误
Notice: Undefined index: reg_billing_name in /Applications/AMPPS/www/flatsome/wp-content/plugins/devsol-auth-customer/index.php on line 110
Notice: Undefined index: reg_billing_phone in /Applications/AMPPS/www/flatsome/wp-content/plugins/devsol-auth-customer/index.php on line 111
Notice: Undefined index: reg_billing_email in /Applications/AMPPS/www/flatsome/wp-content/plugins/devsol-auth-customer/index.php on line 112
Notice: Undefined index: reg_billing_phone in /Applications/AMPPS/www/flatsome/wp-content/plugins/devsol-auth-customer/index.php on line 131
请帮助。
解决方法
您到处都可以看到该通知,因为devsol_customer_auth_register
函数已挂接到init
中,每次加载WordPress时都会触发该功能。可能会使用更好的钩子。
add_action('init','devsol_customer_auth_register');
第二,通知来自这些行,因为$ _POST变量在将变量设置为等于它们时不存在。
$customer_name = sanitize_text_field( $_POST['reg_billing_name'] );
$customer_phone = sanitize_text_field( $_POST['reg_billing_phone'] );
$customer_email = sanitize_email( $_POST['reg_billing_email'] );
为避免这种情况,请先检查变量是否存在。
$customer_name = null;
$customer_phone = null;
$customer_email = null;
if ( isset( $_POST['reg_billing_name'] ) ) {
$customer_name = sanitize_text_field( $_POST['reg_billing_name'] );
}
if ( isset( $_POST['reg_billing_phone'] ) ) {
$customer_name = sanitize_text_field( $_POST['reg_billing_phone'] );
}
if ( isset( $_POST['reg_billing_email'] ) ) {
$customer_name = sanitize_text_field( $_POST['reg_billing_email'] );
}
最后,这是一个片段,应注意添加这些额外的配置文件字段
function woocommerce_edit_my_account_page() {
return apply_filters( 'woocommerce_forms_field',array(
'woocommerce_reg_billing_name' => array(
'type' => 'text','label' => __( 'Reg Billing Name','textdomain' ),'placeholder' => __( 'Billing Name','required' => false,),'woocommerce_reg_billing_phone' => array(
'type' => 'text','label' => __( 'Reg Billing Phone','placeholder' => __( 'Billing Phone','woocommerce_reg_billing_email' => array(
'type' => 'text','label' => __( 'Reg Billing Email','placeholder' => __( 'Billing Email',) );
}
function edit_my_account_page_woocommerce() {
$fields = woocommerce_edit_my_account_page();
foreach ( $fields as $key => $field_args ) {
woocommerce_form_field( $key,$field_args );
}
}
add_action( 'woocommerce_register_form','edit_my_account_page_woocommerce',15 );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。