Добрый день! Сегодня речь пойдет о том как сделать свою абсолютно любую форму авторизации.
Сначала создадим HTML-форму для авторизации. В моем случае это форма в модальном окне.
HTML форма авторизации
<form id="ajax-login-form" method="post"> <label for="username">Имя пользователя:</label> <input type="text" id="username" name="username" required> <input type="hidden" id="security" name="security" value="<?php echo wp_create_nonce('ajax-login-nonce'); ?>"> <label for="password">Пароль:</label> <input type="password" id="password" name="password" required> <input type="submit" value="Войти"> <div id="login-message"></div> </form>
Теперь добавим JavaScript для обработки формы через AJAX. Вы можете добавить этот код в файл вашего шаблона или в отдельный файл JavaScript, подключенный к вашему сайту.
jQuery(document).ready(function($) { $('#ajax-login-form').on('submit', function(e) { e.preventDefault(); var formData = { action: 'ajax_login', username: $('#username').val(), password: $('#password').val(), security: $('#security').val() }; $.ajax({ type: 'POST', url: ajax_login_object.ajax_url, data: formData, success: function(response) { if (response.success) { $('#login-message').html('<wp-p>Вы успешно вошли!</wp-p>'); // Перенаправление или обновление страницы window.location.href = response.data.redirect_url; } else { $('#login-message').html('<wp-p>' + response.data.message + '</wp-p>'); } }, error: function() { $('#login-message').html('<wp-p>Произошла ошибка. Попробуйте еще раз.</wp-p>'); } }); }); });
Теперь добавим PHP-код для обработки AJAX-запроса. Вы можете добавить этот код в файл functions.php
вашей темы.
function ajax_login_init() { wp_register_script('ajax-login-script', get_template_directory_uri() . '/js/ajax-login.js', array('jquery'), null, true); wp_localize_script('ajax-login-script', 'ajax_login_object', array( 'ajax_url' => admin_url('admin-ajax.php') )); wp_enqueue_script('ajax-login-script'); } add_action('wp_enqueue_scripts', 'ajax_login_init'); function ajax_login() { check_ajax_referer('ajax-login-nonce', 'security'); $info = array(); $info['user_login'] = $_POST['username']; $info['user_password'] = $_POST['password']; $info['remember'] = true; $user_signon = wp_signon($info, false); if (is_wp_error($user_signon)) { wp_send_json_error(array('message' => 'Неверное имя пользователя или пароль.')); } else { wp_set_current_user($user_signon->ID); wp_send_json_success(array('redirect_url' => home_url())); } } add_action('wp_ajax_nopriv_ajax_login', 'ajax_login'); add_action('wp_ajax_ajax_login', 'ajax_login');
Теперь у вас есть AJAX-форма авторизации на сайте WordPress. Пользователи смогут авторизоваться без перезагрузки страницы, что улучшит пользовательский опыт