Иногда стандартная форма регистрации WordPress содержит поля, которые по умолчанию обязательны для заполнения, но в вашем проекте может возникнуть необходимость убрать обязательность некоторых из них или вовсе удалить поле. Например, поле «Имя пользователя» или «Электронная почта» сложно убрать, но часто требуется убрать обязательность дополнительных полей, добавленных плагинами или кастомным кодом.
Почему может потребоваться убрать обязательность поля в форме регистрации WordPress
Стандартная форма регистрации WordPress содержит минимальный набор полей, часть из которых обязательны по умолчанию. Однако в реальных проектах часто добавляются дополнительные поля — через плагины, код темы или кастомные решения. Например, плагин Clearfy Pro позволяет расширять форму регистрации, но по умолчанию новые поля могут быть обязательными.
Убирать обязательность или удалять поля нужно, если:
- Вы хотите упростить процесс регистрации;
- Некоторые поля не нужны для вашего сайта;
- Пользовательский опыт ухудшается из-за лишних требований;
- Необходима совместимость с другими плагинами или кастомными решениями.
Рассмотрим, как именно это сделать технически.
Как убрать обязательность поля в форме регистрации WordPress через хуки
Форма регистрации WordPress обрабатывается функцией register_new_user(), которая проверяет поля на обязательность. Для изменения поведения проверки используется фильтр registration_errors.
Пример функции, которая убирает обязательность поля «nickname» (если оно добавлено как обязательное):
function wpgen_remove_nickname_required($errors, $sanitized_user_login, $user_email) {
if (isset($errors->errors['empty_nickname'])) {
unset($errors->errors['empty_nickname']);
}
return $errors;
}
add_filter('registration_errors', 'wpgen_remove_nickname_required', 10, 3);
В этом примере мы проверяем, есть ли ошибка с ключом empty_nickname, и удаляем её. Такой подход позволяет сохранить поле, но убрать обязательность его заполнения.
Важно: ключи ошибок зависят от конкретной реализации, особенно если поля добавлены плагинами. Чтобы узнать точный ключ ошибки, можно добавить временный вывод ошибок при регистрации.
Убираем обязательность кастомного поля с помощью Clearfy Pro
Если вы используете Clearfy Pro, то можно настроить обязательность полей через интерфейс плагина. Но если требуется программный контроль, используйте фильтр:
add_filter('clearfy_registration_fields_validate', function($errors, $fields) {
// Убираем обязательность поля 'phone'
if (isset($errors['phone'])) {
unset($errors['phone']);
}
return $errors;
}, 10, 2);
Этот код позволяет убрать ошибку валидации по полю «phone», если оно было обязательным.
Как полностью удалить поле из формы регистрации
Если нужно не только убрать обязательность, но и полностью удалить поле из формы, можно использовать фильтр register_form для удаления HTML и хук registration_errors для игнорирования ошибок, а также очистить данные из POST.
Пример удаления поля «nickname» из формы регистрации:
function wpgen_remove_nickname_field() {
// Ничего не выводим для nickname
}
add_action('register_form', 'wpgen_remove_nickname_field', 5);
function wpgen_filter_registration_errors($errors, $sanitized_user_login, $user_email) {
// Удаляем ошибки связанные с nickname
if (isset($errors->errors['empty_nickname'])) {
unset($errors->errors['empty_nickname']);
}
return $errors;
}
add_filter('registration_errors', 'wpgen_filter_registration_errors', 10, 3);
function wpgen_sanitize_user_registration($user_login, $user_email, $errors) {
// Удаляем из $_POST поле nickname, если есть
if (isset($_POST['nickname'])) {
unset($_POST['nickname']);
}
}
add_action('register_post', 'wpgen_sanitize_user_registration', 10, 3);
Такой подход полностью исключит поле из формы и из процесса регистрации.
Дополнительные советы по работе с формой регистрации
При кастомизации форм регистрации в WordPress не забывайте:
- Тестировать регистрацию на наличие ошибок и предупреждений;
- Обновлять шаблоны форм, если тема или плагины обновляются;
- Учитывать безопасность — не убирайте обязательность важных полей, таких как email;
- Использовать плагины для расширенной настройки регистрации, например, WPCommunity или Clearfy Pro;
- При необходимости создавать собственные шорткоды для регистрации, чтобы полностью контролировать вывод формы.
Пример простого шорткода для кастомной формы регистрации без обязательного поля "phone"
function wpgen_custom_registration_shortcode() {
if ('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['wpgen_register_nonce']) && wp_verify_nonce($_POST['wpgen_register_nonce'], 'wpgen_register')) {
// обработка регистрации (упрощённый пример)
$username = sanitize_user($_POST['user_login']);
$email = sanitize_email($_POST['user_email']);
$errors = new WP_Error();
if (empty($username) || empty($email)) {
$errors->add('field', 'Поля логин и email обязательны');
}
if (empty($errors->errors)) {
$user_id = wp_create_user($username, wp_generate_password(), $email);
if (!is_wp_error($user_id)) {
echo '<p>Регистрация прошла успешно.</p>';
return;
} else {
$errors = $user_id;
}
}
foreach ($errors->get_error_messages() as $error) {
echo '<p style="color:red;">' . esc_html($error) . '</p>';
}
}
ob_start();
?>
<form method="post">
<p>
<label for="user_login">Логин</label><br/>
<input type="text" name="user_login" id="user_login" required />
</p>
<p>
<label for="user_email">Email</label><br/>
<input type="email" name="user_email" id="user_email" required />
</p>
<p><input type="submit" value="Зарегистрироваться" /></p>
<?php wp_nonce_field('wpgen_register', 'wpgen_register_nonce'); ?>
</form>
<?php
return ob_get_clean();
}
add_shortcode('wpgen_custom_register', 'wpgen_custom_registration_shortcode');
Этот пример создаёт простую форму без поля «phone» и без его обязательности, полностью контролируя процесс регистрации.