Я видел подобные вопросы, но не смог найти решение для меня.
Я пытаюсь добавить пользовательские поля в регистрационную форму WooCommerce, в частности, имя и фамилию. Мне удалось создать эти поля, но введенная информация не переходит на страницу «Сведения о счете», когда пользователь вошел в систему. В других руководствах упоминается проверка полей, но я не уверен, что это имеет отношение ко мне или нет. Я работаю над дочерней темой WordPress.
Чтобы просмотреть код, перейдите на страницу codepad .org . Я попытался вставить код здесь, используя вариант образца кода, но он не работает должным образом.
Надеюсь, я ясно объяснил. Если нет, сообщите мне, и я уточню.
Я думаю, что вы перезаписываете woocommerce/templates/myaccount/form-login.php
, и, делая это, вам удалось показать имя billing_first_name
и billing_last_name
но вы забыли использовать woocommerce_created_customer
hook, который необходим для сохранения этих данных в вашей базе данных.
Я предлагаю, чтобы вы сохранили шаблон, как есть, и добавьте это поле через 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');
Возвращаясь к вашей второй части вашего вопроса о проверке, она полностью опциональна и зависит от вашей бизнес-логики, что то, что вы хотите, в целом большая часть сайта имеет имя и фамилию, но снова полностью зависит от вас. Если вы 't хочу проверить это, а затем удалить <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-файлов.
Код протестирован и полностью работоспособен.
Надеюсь это поможет!
Вы можете использовать этот плагин для добавления настраиваемых полей в регистрационную форму Woo commerce
Дополнительные поля регистрации Woocommerce
https://wordpress.org/plugins/woocommerce-extra-accounts-fields/screenshots/
благодаря