В стандартной форме авторизации WordPress есть всего два поля — имя пользователя и пароль. Но иногда возникает необходимость добавить дополнительные поля, например, для двухфакторной аутентификации, ввода кода безопасности или выбора типа пользователя. В этой статье подробно разберём, как с помощью собственного кода добавить новые поля на страницу входа и корректно обработать их на сервере.
Почему стоит добавлять поля на страницу входа вручную, а не через плагины
Чаще всего для расширения формы авторизации используют готовые плагины. Но у них есть свои минусы:
- Избыточный функционал, который вам может быть не нужен.
- Повышенная нагрузка и риск конфликтов с другими плагинами.
- Ограниченная кастомизация под конкретные задачи.
Добавляя поля вручную, вы получаете полный контроль над процессом и делаете решение максимально легковесным и безопасным.
Как добавить новое поле на форму входа WordPress
Для добавления поля используем хук login_form. Он позволяет вставить HTML прямо в форму авторизации. Ниже пример, как добавить поле «Код доступа» с именем wpmax_access_code:
function wpmax_add_custom_login_field() {
?>
<p>
<label for="wpmax_access_code">Код доступа<br/>
<input type="text" name="wpmax_access_code" id="wpmax_access_code" class="input" value="" size="20" /></label>
</p>
<?php
}
add_action('login_form','wpmax_add_custom_login_field');Этот код добавит новое поле прямо под стандартными полями логина и пароля.
Валидация и обработка дополнительных полей при входе
Добавить поле мало — нужно проверить его при отправке формы. Для этого используем фильтр authenticate, который вызывается при попытке входа пользователя. В обработчике проверим значение поля и при необходимости вернём ошибку.
function wpmax_authenticate_custom_field($user, $username, $password) {
if ( isset($_POST['wpmax_access_code']) ) {
$access_code = trim($_POST['wpmax_access_code']);
if (empty($access_code) || $access_code !== 'secret123') {
return new WP_Error('access_code_error', __('<strong>Ошибка:</strong> Неверный код доступа.'));
}
} else {
return new WP_Error('access_code_error', __('<strong>Ошибка:</strong> Отсутствует код доступа.'));
}
return $user;
}
add_filter('authenticate', 'wpmax_authenticate_custom_field', 30, 3);В этом примере мы проверяем, что код доступа равен строке secret123. При несоответствии пользователь увидит ошибку и не сможет войти.
Стилизация нового поля и улучшение UX
Можно добавить CSS, чтобы поле выглядело гармонично с остальной формой. Это делается через хук login_enqueue_scripts:
function wpmax_login_custom_styles() {
?>
<style>
#wpmax_access_code {
width: 100%;
box-sizing: border-box;
margin-top: 5px;
}
</style>
<?php
}
add_action('login_enqueue_scripts', 'wpmax_login_custom_styles');Так поле будет адаптировано под ширину формы и станет удобнее для ввода.
Пример расширенного варианта: двухфакторная аутентификация с кодом из базы данных
Допустим, у вас есть пользовательское поле two_factor_code, сохранённое в метаданных пользователя. При входе нужно проверить, что введённый код совпадает с сохранённым.
function wpmax_authenticate_two_factor($user, $username, $password) {
if (is_a($user, 'WP_User')) {
if (isset($_POST['wpmax_two_factor_code'])) {
$input_code = sanitize_text_field($_POST['wpmax_two_factor_code']);
$saved_code = get_user_meta($user->ID, 'two_factor_code', true);
if ($input_code !== $saved_code) {
return new WP_Error('two_factor_error', __('<strong>Ошибка:</strong> Неверный код двухфакторной аутентификации.'));
}
} else {
return new WP_Error('two_factor_error', __('<strong>Ошибка:</strong> Введите код двухфакторной аутентификации.'));
}
}
return $user;
}
add_filter('authenticate', 'wpmax_authenticate_two_factor', 35, 3);Для такого сценария добавьте поле в форму аналогично первому примеру, только с другим именем wpmax_two_factor_code. Это позволит гибко настраивать двухфакторную аутентификацию без плагинов.
Советы по безопасности при добавлении кастомных полей
Добавляя поля на страницу авторизации, важно помнить:
- Всегда используйте
sanitize_text_field()или аналогичные функции для очистки данных. - Не храните секретные коды в открытом виде — лучше хэшируйте или храните временные токены.
- Используйте
wp_nonce_field()и проверяйте nonce для защиты от CSRF-атак, если добавляете более сложные формы. - Не выводите подробные ошибки, которые могут помочь злоумышленникам.
Заключение и полезные плагины для расширения авторизации
Хотя ручное добавление полей — отличный способ кастомизировать авторизацию, иногда удобнее использовать проверенные плагины. Например:
- Clearfy Pro — содержит функции для улучшения входа и безопасности.
- WPGPT — позволяет автоматизировать ответы, можно расширить возможности входа.
Добавление дополнительных полей в форму авторизации — несложная задача, если понимать, какие хуки использовать и как правильно обработать данные. Приведённые примеры помогут быстро внедрить нужный функционал и повысить безопасность вашего сайта на WordPress.