Вопрос или проблема
Я не знаю, как добавить поле для имени пользователя на страницу регистрации. Также нет настроек для этого. Раньше была настройка для добавления поля имени пользователя, но сейчас её нет. Как я могу добавить поле имени пользователя в регистрацию WooCommerce? Я уже пробовал код, но он не работает. Я пытался добавить код следующим образом:
add_action( ‘woocommerce_register_form_start’, ‘custom_woocommerce_register_username’ );
function custom_woocommerce_register_username() {
?>
*
” />
<?php
}
// Обеспечение обязательности поля имени пользователя
add_filter( ‘woocommerce_registration_errors’, ‘custom_woocommerce_registration_errors_username’, 10, 3 );
function custom_woocommerce_registration_errors_username( $errors, $username, $email ) {
if ( isset( $_POST[‘username’] ) && empty( $_POST[‘username’] ) ) {
$errors->add( ‘username_error’, __( ‘Имя пользователя обязательно!’, ‘woocommerce’ ) );
}
return $errors;
}
// Сохранение имени пользователя при регистрации
add_action( ‘woocommerce_created_customer’, ‘custom_save_registration_fields_username’ );
function custom_save_registration_fields_username( $customer_id ) {
if ( isset( $_POST[‘username’] ) ) {
wp_update_user( array( ‘ID’ => $customer_id, ‘user_login’ => sanitize_text_field( $_POST[‘username’] ) ) );
}
}
Ответ или решение
Чтобы добавить поле имени пользователя на страницу регистрации в WooCommerce, вы можете использовать следующий код. Убедитесь, что вы добавляете код в файл functions.php
вашей темы или в специальный плагин (рекомендуется использовать плагин для сохранения изменений, чтобы избежать их потери при обновлении темы).
Шаг 1: Добавьте поле имени пользователя на форму регистрации
add_action( 'woocommerce_register_form_start', 'custom_woocommerce_register_username' );
function custom_woocommerce_register_username() {
?>
<p class="form-row form-row-wide">
<label for="reg_username"><?php _e( 'Username', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="username" id="reg_username" value="<?php if ( ! empty( $_POST['username'] ) ) echo esc_attr( wp_unslash( $_POST['username'] ) ); ?>" />
</p>
<?php
}
Шаг 2: Валидация имени пользователя
Добавьте следующий код, чтобы сделать поле имени пользователя обязательным:
add_filter( 'woocommerce_registration_errors', 'custom_woocommerce_registration_errors_username', 10, 3 );
function custom_woocommerce_registration_errors_username( $errors, $username, $email ) {
if ( isset( $_POST['username'] ) && empty( $_POST['username'] ) ) {
$errors->add( 'username_error', __( 'Username is required!', 'woocommerce' ) );
}
return $errors;
}
Шаг 3: Сохранение имени пользователя при регистрации
Используйте следующий код для сохранения имени пользователя в базе данных:
add_action( 'woocommerce_created_customer', 'custom_save_registration_fields_username' );
function custom_save_registration_fields_username( $customer_id ) {
if ( isset( $_POST['username'] ) ) {
wp_update_user( array( 'ID' => $customer_id, 'user_login' => sanitize_text_field( $_POST['username'] ) ) );
}
}
Полный код
Объедините все компоненты вместе, чтобы они работали в одном месте:
add_action( 'woocommerce_register_form_start', 'custom_woocommerce_register_username' );
function custom_woocommerce_register_username() {
?>
<p class="form-row form-row-wide">
<label for="reg_username"><?php _e( 'Username', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="username" id="reg_username" value="<?php if ( ! empty( $_POST['username'] ) ) echo esc_attr( wp_unslash( $_POST['username'] ) ); ?>" />
</p>
<?php
}
add_filter( 'woocommerce_registration_errors', 'custom_woocommerce_registration_errors_username', 10, 3 );
function custom_woocommerce_registration_errors_username( $errors, $username, $email ) {
if ( isset( $_POST['username'] ) && empty( $_POST['username'] ) ) {
$errors->add( 'username_error', __( 'Username is required!', 'woocommerce' ) );
}
return $errors;
}
add_action( 'woocommerce_created_customer', 'custom_save_registration_fields_username' );
function custom_save_registration_fields_username( $customer_id ) {
if ( isset( $_POST['username'] ) ) {
wp_update_user( array( 'ID' => $customer_id, 'user_login' => sanitize_text_field( $_POST['username'] ) ) );
}
}
Дополнительные рекомендации
- Резервное копирование: Перед внесением изменений в файл
functions.php
, создайте резервную копию, чтобы избежать возможных проблем. - Использование плагинов: Рассмотрите возможность использования плагинов, которые позволяют настраивать форму регистрации WooCommerce, такие как "WooCommerce Registration Form" или "User Registration".
- Тестирование: После добавления кода тестируйте регистрацию, чтобы убедиться, что всё работает правильно и нет ошибок.
Следуя этим шагам, вы сможете добавить поле имени пользователя на страницу регистрации WooCommerce, а также корректно обработать валидацию и сохранение данных.