2016-11-14 3 views
1

Я видел похожие вопросы, но не смог найти решение для меня.Как добавить пользовательские поля в регистрационную форму WooCommerce

Я пытаюсь добавить пользовательские поля в регистрационную форму WooCommerce, в частности, имя и фамилию. Мне удалось создать эти поля, но введенная информация не переходит на страницу «Сведения о счете», когда пользователь вошел в систему. В других руководствах упоминается проверка полей, но я не уверен, что это имеет отношение ко мне или нет. Я работаю над дочерней темой Wordpress.

Для просмотра кода, пожалуйста, посетите codepad .org. Я попытался вставить код здесь, используя пример кода, но он не работает должным образом.

Надеюсь, я ясно объяснил. Если нет, сообщите мне, и я уточню.

ответ

4

Я думаю, что у вас есть перезаписать woocommerce/templates/myaccount/form-login.php шаблон, и при этом вам удалось показать billing_first_name и billing_last_name но вы забудете использовать крючок woocommerce_created_customer, который необходим для сохранения этих данных в вашей базе данных.

Что я предлагаю, что вы держите шаблон, как это и добавить эти поля через function.php

Вот код для добавления пользовательских полей в форме регистрации WooCommerce:

/** 
* To add WooCommerce registration form custom fields. 
*/ 

function text_domain_woo_reg_form_fields() { 
    ?> 
    <p class="form-row form-row-first"> 
     <label for="billing_first_name"><?php _e('First name', 'text_domain'); ?><span class="required">*</span></label> 
     <input type="text" class="input-text" name="billing_first_name" id="billing_first_name" value="<?php if (!empty($_POST['billing_first_name'])) esc_attr_e($_POST['billing_first_name']); ?>" /> 
    </p> 
    <p class="form-row form-row-last"> 
     <label for="billing_last_name"><?php _e('Last name', 'text_domain'); ?><span class="required">*</span></label> 
     <input type="text" class="input-text" name="billing_last_name" id="billing_last_name" value="<?php if (!empty($_POST['billing_last_name'])) esc_attr_e($_POST['billing_last_name']); ?>" /> 
    </p> 
    <div class="clear"></div> 
    <?php 
} 

add_action('woocommerce_register_form_start', 'text_domain_woo_reg_form_fields'); 

Далее в ваша вторая часть вашего вопроса о проверке полностью необязательна и зависит от вашей бизнес-логики, что то, что вы хотите, в целом большая часть сайта имеет имя и фамилию, но она полностью зависит от вас, если вы не хотите проверить это, а затем удалить <span class="required">*</span> из кода выше и пропустить этот раздел.

/** 
* To validate WooCommerce registration form custom fields. 
*/ 
function text_domain_woo_validate_reg_form_fields($username, $email, $validation_errors) { 
    if (isset($_POST['billing_first_name']) && empty($_POST['billing_first_name'])) { 
     $validation_errors->add('billing_first_name_error', __('<strong>Error</strong>: First name is required!', 'text_domain')); 
    } 

    if (isset($_POST['billing_last_name']) && empty($_POST['billing_last_name'])) { 
     $validation_errors->add('billing_last_name_error', __('<strong>Error</strong>: Last name is required!.', 'text_domain')); 
    } 
    return $validation_errors; 
} 

add_action('woocommerce_register_post', 'text_domain_woo_validate_reg_form_fields', 10, 3); 

Теперь это основная часть, и это то, что вы были пропустили, ниже код необходим, чтобы сохранить пользовательские данные:

/** 
* To save WooCommerce registration form custom fields. 
*/ 
function text_domain_woo_save_reg_form_fields($customer_id) { 
    //First name field 
    if (isset($_POST['billing_first_name'])) { 
     update_user_meta($customer_id, 'first_name', sanitize_text_field($_POST['billing_first_name'])); 
     update_user_meta($customer_id, 'billing_first_name', sanitize_text_field($_POST['billing_first_name'])); 
    } 
    //Last name field 
    if (isset($_POST['billing_last_name'])) { 
     update_user_meta($customer_id, 'last_name', sanitize_text_field($_POST['billing_last_name'])); 
     update_user_meta($customer_id, 'billing_last_name', sanitize_text_field($_POST['billing_last_name'])); 
    } 
} 

add_action('woocommerce_created_customer', 'text_domain_woo_save_reg_form_fields'); 

Все выше код идет в function.php файле вашей активной детская тема (или тема). Или также в любых плагинах php-файлов.
Код проверен и полностью работоспособен.
Надеюсь, это поможет!

Смежные вопросы