WordPress: как создать плагин для авторизации по телефонному номеру

В современных условиях удобство авторизации на сайте выходит на первый план. Один из популярных способов — вход по номеру телефона с подтверждением через SMS. В этой статье мы пошагово разберём, как создать собственный плагин для WordPress, который реализует авторизацию пользователей по телефонному номеру с использованием SMS-кода.

Зачем нужна авторизация по телефону в WordPress

Стандартный вход через логин и пароль часто вызывает сложности у пользователей: забытые пароли, сложность регистрации и пр. Телефонный номер — это уникальный идентификатор, который пользователь всегда помнит. Такой способ повышает удобство и безопасность.

Кроме того, это снижает нагрузку на службу поддержки и сокращает количество брошенных регистраций. Для многих проектов, особенно коммерческих и социальных, это важный инструмент.

Реализация собственного плагина даёт гибкость: вы сможете интегрировать любую SMS-службу, адаптировать под дизайн и логику сайта.

Основные этапы создания плагина авторизации по телефону

Регистрация и валидация номера

Первым шагом необходимо создать форму, в которой пользователь вводит свой номер телефона. Для удобства и правильной работы с данными нужно реализовать:

  • Проверку формата номера (например, через регулярные выражения);
  • Очистку данных от лишних символов;
  • Проверку, зарегистрирован ли такой номер в базе данных пользователей WordPress.

Вот пример функции для валидации номера с префиксом wpcodex_:

function wpcodex_validate_phone($phone) {
    $phone = preg_replace('/[^\d]/', '', $phone); // оставляем только цифры
    if(strlen($phone) < 10 || strlen($phone) > 15) {
        return false; // некорректная длина
    }
    return $phone;
}

Отправка SMS с кодом подтверждения

Для отправки SMS можно использовать сторонние сервисы: Twilio, SMS.ru, Nexmo и др. Важно, чтобы сервис имел удобный API и позволял отправлять сообщения программно.

Пример интеграции с SMS.ru через cURL:

function wpcodex_send_sms($phone, $code) {
    $api_id = 'ВАШ_API_ID';
    $message = 'Ваш код подтверждения: ' . $code;
    $url = 'https://sms.ru/sms/send?api_id=' . $api_id . '&to=' . $phone . '&msg=' . urlencode($message);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    return $response;
}

При разработке плагина сделайте настройки подключения к SMS-сервису через страницу настроек в админке WordPress.

Хранение и проверка кода

Сгенерированный код нужно сохранить в сессии или в базе (например, в пользовательском мета-поле), чтобы потом сверить при вводе пользователем.

Пример генерации 6-значного кода и сохранения в сессию:

function wpcodex_generate_code() {
    return rand(100000, 999999);
}

session_start();
$_SESSION['wpcodex_phone_code'] = wpcodex_generate_code();

Далее при вводе кода пользователем проверяйте совпадение с сохранённым.

Пример простой формы авторизации по телефону

Ниже пример HTML-формы и обработчика на PHP для нашего плагина:

<form method="post">
    <label>Телефон:</label>
    <input type="text" name="phone" required />
    <button type="submit">Получить код</button>
</form>

<?php
if($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['phone'])) {
    $phone = wpcodex_validate_phone($_POST['phone']);
    if($phone) {
        // Проверяем, есть ли пользователь с таким номером
        $user_query = new WP_User_Query(array(
            'meta_key' => 'phone_number',
            'meta_value' => $phone
        ));
        if(!empty($user_query->results)) {
            $code = wpcodex_generate_code();
            $_SESSION['wpcodex_phone_code'] = $code;
            $_SESSION['wpcodex_phone'] = $phone;
            wpcodex_send_sms($phone, $code);
            echo 'Код отправлен на ваш телефон.';
        } else {
            echo 'Пользователь с таким номером не найден.';
        }
    } else {
        echo 'Некорректный номер телефона.';
    }
}
?>

Авторизация пользователя после подтверждения кода

После получения кода пользователь вводит его в форму. Если код совпадает, мы авторизуем пользователя программно.

Пример проверки кода и входа пользователя:

<form method="post">
    <label>Введите код из SMS:</label>
    <input type="text" name="phone_code" required />
    <button type="submit">Войти</button>
</form>

<?php
if($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['phone_code'])) {
    session_start();
    $input_code = sanitize_text_field($_POST['phone_code']);
    if(isset($_SESSION['wpcodex_phone_code']) && $_SESSION['wpcodex_phone_code'] == $input_code) {
        // Получаем пользователя по номеру
        $phone = $_SESSION['wpcodex_phone'];
        $user_query = new WP_User_Query(array(
            'meta_key' => 'phone_number',
            'meta_value' => $phone
        ));
        if(!empty($user_query->results)) {
            $user = $user_query->results[0];
            wp_set_current_user($user->ID);
            wp_set_auth_cookie($user->ID);
            echo 'Вы успешно вошли!';
            unset($_SESSION['wpcodex_phone_code']);
            unset($_SESSION['wpcodex_phone']);
        } else {
            echo 'Пользователь не найден.';
        }
    } else {
        echo 'Неверный код.';
    }
}
?>

Как хранить телефон пользователя в профиле WordPress

Для работы этой схемы нужно, чтобы у пользователей был сохранён номер телефона в метаполях. Добавим поле при регистрации или редактировании профиля:

function wpcodex_show_phone_field($user) {
    $phone = get_user_meta($user->ID, 'phone_number', true);
    echo '<h3>Телефон</h3>';
    echo '<table class="form-table"><tr><th><label for="phone_number">Телефон</label></th><td>';
    echo '<input type="text" name="phone_number" id="phone_number" value="' . esc_attr($phone) . '" class="regular-text" />';
    echo '</td></tr></table>';
}
add_action('show_user_profile', 'wpcodex_show_phone_field');
add_action('edit_user_profile', 'wpcodex_show_phone_field');

function wpcodex_save_phone_field($user_id) {
    if(!current_user_can('edit_user', $user_id)) {
        return false;
    }
    if(isset($_POST['phone_number'])) {
        update_user_meta($user_id, 'phone_number', sanitize_text_field($_POST['phone_number']));
    }
}
add_action('personal_options_update', 'wpcodex_save_phone_field');
add_action('edit_user_profile_update', 'wpcodex_save_phone_field');

Подводим итоги и рекомендации

Создание плагина для авторизации по телефону в WordPress — задача вполне решаемая своими силами. Такой способ авторизации улучшит UX, повысит безопасность и снизит нагрузку на службу поддержки.

Рекомендуется:

  • Подключать надежные SMS-сервисы с хорошим API;
  • Добавлять защиту от перебора кодов (например, лимит попыток);
  • Использовать SSL на сайте для безопасности передачи данных;
  • Интегрировать с существующими профилями пользователей и плагинами.

Если хотите готовое решение с удобной настройкой, обратите внимание на плагин WPGPT от WPShop — он позволяет автоматизировать многие задачи по интеграции и настройке авторизации.

WordPress: как создать плагин для авторизации по телефонному номеру
23.12.2025
Как удалить ревизии постов в WordPress для очистки базы данных
11.12.2025
Как удалить неиспользуемые метаданные в WordPress для оптимизации базы данных
23.03.2026
Как создать собственный виджет WordPress своими руками
20.11.2025
Как добавить автоматический режим работы плагинов WordPress
28.01.2026