Иногда стандартных полей регистрации WordPress недостаточно, и возникает необходимость добавить свои уникальные поля, например, номер телефона, ID пользователя или другой уникальный идентификатор. Важно не только добавить поле, но и обеспечить проверку уникальности значения, чтобы избежать дублирования.
Почему стоит добавить уникальные поля в форму регистрации WordPress
По умолчанию WordPress предлагает только логин, email и пароль. Однако для бизнеса, сообщества или проекта могут потребоваться дополнительные данные, например:
- Уникальный идентификатор клиента
- Номер телефона для связи
- Промокод или реферальный код
- Данные для интеграции с внешними сервисами
Добавление уникальных полей существенно расширяет возможности сбора информации, но требует дополнительной валидации, чтобы избежать конфликтов и ошибок.
Добавление уникального поля в форму регистрации: пример кода для WP24
Рассмотрим, как добавить поле "Телефон" и проверить, что введённый номер уникален.
function wp24_add_phone_field() {
?>
<p>
<label for="phone">Телефон<br />
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr( wp_unslash( $_POST['phone'] ?? '' ) ); ?>" size="25" /></label>
</p>
<?php
}
add_action( 'register_form', 'wp24_add_phone_field' );
// Валидация уникальности телефона
function wp24_check_phone_uniqueness( $errors, $sanitized_user_login, $user_email ) {
if ( empty( $_POST['phone'] ) ) {
$errors->add( 'phone_error', 'Пожалуйста, введите телефон.' );
} else {
$phone = sanitize_text_field( $_POST['phone'] );
$user_query = new WP_User_Query( array(
'meta_key' => 'phone',
'meta_value' => $phone,
'number' => 1
) );
if ( ! empty( $user_query->get_results() ) ) {
$errors->add( 'phone_error', 'Этот телефон уже зарегистрирован.' );
}
}
return $errors;
}
add_filter( 'registration_errors', 'wp24_check_phone_uniqueness', 10, 3 );
// Сохранение телефона после регистрации
function wp24_save_phone_field( $user_id ) {
if ( ! empty( $_POST['phone'] ) ) {
update_user_meta( $user_id, 'phone', sanitize_text_field( $_POST['phone'] ) );
}
}
add_action( 'user_register', 'wp24_save_phone_field' );Этот код добавляет поле "Телефон" в форму регистрации, проверяет, что номер не пустой и не используется другим пользователем, и сохраняет его в метаданных пользователя.
Используем плагины для упрощения задачи добавления уникальных полей
Если вы не хотите писать код вручную, можно использовать плагины, поддерживающие добавление кастомных полей с проверкой уникальности:
- User Registration – Custom Registration Form, Login and User Profile for WordPress: позволяет создавать формы с любыми полями и уникальной валидацией.
- Profile Builder: расширенный функционал для создания регистрации с кастомными полями и их проверкой.
- WP User Manager: гибкие возможности по добавлению и проверке пользовательских полей.
В некоторых случаях полезно дополнить эти плагины собственными фильтрами для проверки уникальности, если стандартных возможностей недостаточно.
Практические советы по работе с уникальными полями в регистрации WordPress
При добавлении уникальных полей и их проверке стоит учитывать несколько моментов:
- Оптимизируйте запросы к базе данных. Используйте WP_User_Query с параметром 'meta_key' для поиска, чтобы не нагружать сервер.
- Обрабатывайте данные безопасно. Всегда применяйте функции sanitize_text_field и esc_attr для очистки и вывода данных.
- Добавляйте сообщения об ошибках с помощью объекта WP_Error, чтобы пользователь понимал причину отклонения.
- Проверяйте уникальность не только по базе WordPress, но и внешним системам, если интегрируете регистрацию с CRM или другими сервисами.
Пример расширения проверки уникальности с учетом внешнего API
Иногда нужно проверить уникальность номера телефона не только в WordPress, но и в CRM. Пример простой проверки через API:
function wp24_check_phone_external_api( $phone ) {
$response = wp_remote_get( 'https://external-crm.example.com/api/check_phone?phone=' . urlencode( $phone ) );
if ( is_wp_error( $response ) ) {
return false; // Не удалось проверить
}
$data = json_decode( wp_remote_retrieve_body( $response ), true );
return ! empty( $data['exists'] );
}
function wp24_check_phone_uniqueness_extended( $errors, $sanitized_user_login, $user_email ) {
if ( ! empty( $_POST['phone'] ) ) {
$phone = sanitize_text_field( $_POST['phone'] );
$user_query = new WP_User_Query( array(
'meta_key' => 'phone',
'meta_value' => $phone,
'number' => 1
) );
if ( ! empty( $user_query->get_results() ) || wp24_check_phone_external_api( $phone ) ) {
$errors->add( 'phone_error', 'Этот телефон уже зарегистрирован локально или в CRM.' );
}
}
return $errors;
}
add_filter( 'registration_errors', 'wp24_check_phone_uniqueness_extended', 20, 3 );Этот код показывает, как можно расширить проверку уникальности, комбинируя локальную базу и внешний сервис.
Выводы и рекомендации
Добавление уникальных полей в форму регистрации WordPress — важная задача для персонализации и расширения функционала вашего сайта. Обязательно реализуйте проверку уникальности, чтобы избежать проблем с дублированием данных. Используйте предоставленные примеры кода или проверенные плагины, а также учитывайте интеграцию с внешними системами при необходимости.
Подробнее о расширенных возможностях WordPress, плагинах и инструментах можно узнать на wpshop.ru.