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

В современных условиях удобство авторизации на сайте — один из ключевых факторов удержания посетителей. В WordPress стандартный способ входа — через email и пароль. Но что, если вам нужно реализовать авторизацию по номеру телефона? Это удобно, быстро и снижает порог входа для пользователей. В этой статье подробно разберем, как добавить в WordPress возможность входа по телефону, рассмотрим популярные плагины и приведем примеры собственного кода.

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

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

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

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

Популярные плагины для авторизации по телефону в WordPress

1. MiniOrange OTP Verification

Этот плагин позволяет реализовать вход и регистрацию по номеру телефона с подтверждением через SMS-код. Поддерживает множество SMS-провайдеров и легко интегрируется с WooCommerce, BuddyPress и другими плагинами.

Основные возможности:

  • Подтверждение номера телефона при регистрации;
  • Вход с помощью OTP (одноразового пароля);
  • Поддержка нескольких SMS-шлюзов;
  • Настраиваемые сообщения;
  • Двухфакторная аутентификация.

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

2. WordPress OTP Verification (premium)

Платный плагин с более широкими возможностями: можно настроить авторизацию через телефон, email, а также использовать OTP для подтверждения различных действий на сайте. Есть интеграция с WooCommerce, Contact Form 7, и другими популярными расширениями.

Преимущества:

  • Гибкая настройка шаблонов SMS и email;
  • Поддержка шаблонов для разных стран;
  • Интеграция с кастомными формами;
  • Отчеты и статистика по отправленным кодам.

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

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

Создаем таблицу для хранения телефонов и кодов

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

function wponline_create_otp_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wponline_otp_codes';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
      id bigint(20) NOT NULL AUTO_INCREMENT,
      phone varchar(20) NOT NULL,
      otp_code varchar(6) NOT NULL,
      created_at datetime NOT NULL,
      PRIMARY KEY  (id),
      UNIQUE KEY phone (phone)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'wponline_create_otp_table');

Генерация OTP и отправка SMS

Далее создадим функцию, которая будет генерировать код и отправлять SMS. Для отправки можно использовать любой SMS API, например, Twilio, SMS.ru или другие.

function wponline_generate_and_send_otp($phone) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wponline_otp_codes';

    $otp = rand(100000, 999999);
    $now = current_time('mysql');

    // Сохраняем или обновляем код в базе
    $wpdb->replace(
        $table_name,
        [
            'phone' => $phone,
            'otp_code' => $otp,
            'created_at' => $now
        ],
        ['%s', '%s', '%s']
    );

    // Отправка SMS (пример для SMS.ru)
    $api_id = 'ВАШ_API_ID';
    $message = "Ваш код подтверждения: $otp";
    $url = "https://sms.ru/sms/send?api_id=$api_id&to=$phone&msg=" . urlencode($message);

    wp_remote_get($url);

    return true;
}

Форма ввода телефона и проверки OTP

Создаем шорткод, который выведет форму для ввода телефона и поля для ввода OTP. После отправки формы будут вызваны соответствующие функции для генерации кода и проверки.

function wponline_otp_form() {
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        if (isset($_POST['phone'])) {
            $phone = sanitize_text_field($_POST['phone']);
            wponline_generate_and_send_otp($phone);
            echo '<p>Код отправлен на номер ' . esc_html($phone) . '</p>';
            echo wponline_otp_verification_form($phone);
        } elseif (isset($_POST['phone']) && isset($_POST['otp'])) {
            $phone = sanitize_text_field($_POST['phone']);
            $otp = sanitize_text_field($_POST['otp']);
            if (wponline_verify_otp($phone, $otp)) {
                echo '<p>Авторизация прошла успешно!</p>';
                // Здесь можно авторизовать пользователя или создать сессию
            } else {
                echo '<p style="color:red;">Неверный код или срок действия истек.</p>';
                echo wponline_otp_verification_form($phone);
            }
        }
    } else {
        echo '<form method="post"><input type="text" name="phone" placeholder="Введите номер телефона" required><input type="submit" value="Получить код"></form>';
    }
}
add_shortcode('wponline_otp', 'wponline_otp_form');

function wponline_otp_verification_form($phone) {
    return '<form method="post"><input type="hidden" name="phone" value="' . esc_attr($phone) . '"><input type="text" name="otp" placeholder="Введите код" required><input type="submit" value="Подтвердить"></form>';
}

Проверка OTP

Функция проверки сопоставляет введенный код с сохраненным в базе и проверяет, что код не старше 5 минут.

function wponline_verify_otp($phone, $otp) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wponline_otp_codes';

    $record = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE phone = %s", $phone));

    if (!$record) return false;

    $created_at = strtotime($record->created_at);
    $now = current_time('timestamp');

    if ($record->otp_code === $otp && ($now - $created_at) <= 300) { // 5 минут
        return true;
    }
    return false;
}

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

Чтобы после успешной проверки OTP автоматически авторизовать пользователя, нужно связать номер телефона с учетной записью. Для этого можно добавить мета-поле для пользователей с номером телефона и расширить функцию верификации.

Для создания пользователя по номеру телефона, если его нет, используйте следующий пример:

function wponline_get_or_create_user_by_phone($phone) {
    $users = get_users([
        'meta_key' => 'wponline_phone',
        'meta_value' => $phone,
        'number' => 1
    ]);
    if (!empty($users)) {
        return $users[0];
    }
    $username = 'user_' . preg_replace('/\D/', '', $phone);
    if (username_exists($username)) {
        $username .= wp_rand(10, 99);
    }
    $password = wp_generate_password(12, false);
    $user_id = wp_create_user($username, $password);
    if (!is_wp_error($user_id)) {
        update_user_meta($user_id, 'wponline_phone', $phone);
        return get_user_by('ID', $user_id);
    }
    return false;
}

После подтверждения OTP можно выполнить вход так:

function wponline_login_user_by_phone($phone) {
    $user = wponline_get_or_create_user_by_phone($phone);
    if ($user) {
        wp_set_current_user($user->ID);
        wp_set_auth_cookie($user->ID);
        do_action('wp_login', $user->user_login, $user);
        return true;
    }
    return false;
}
<

Добавьте вызов этой функции после успешной проверки OTP, чтобы пользователь автоматически вошел на сайт.

Выводы и рекомендации

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

Обязательно учитывайте особенности SMS-провайдеров и соблюдайте правила GDPR и других законов о персональных данных. Также рекомендуем добавлять возможность резервного входа по email или паролю, чтобы избежать проблем с утерей телефона.

Используйте приведенные примеры, чтобы адаптировать авторизацию под свои задачи и сделать сайт более современным и удобным для пользователей.

Как автоматически удалять старые пункты в меню WordPress по дате создания
01.03.2026
Как сделать автоматическое удаление старых продуктов в WooCommerce
30.12.2025
Как использовать MetaBox для создания собственных пользовательских полей в WordPress
05.04.2026
Как настроить автоматическое создание резервных копий в WordPress
20.12.2025
Как удалить изменяемые поля в WordPress при удалении записи
06.01.2026