Если вы разрабатываете сайт на WordPress и хотите добавить функциональность отправки формы с использованием AJAX, вы можете использовать встроенные функции WordPress для обработки AJAX-запросов. В этой статье мы рассмотрим, как создать и настроить AJAX-обработчик для отправки формы на WordPress.
Что такое AJAX?
AJAX (Asynchronous JavaScript and XML) — это технология, которая позволяет отправлять и получать данные с сервера без перезагрузки страницы. Это делает взаимодействие с пользователем более плавным и удобным.
Как настроить AJAX-обработчик для отправки формы на WordPress
Создание функции для обработки AJAX-запроса
Сначала создадим функцию, которая будет обрабатывать AJAX-запросы. Мы будем использовать хуки wp_ajax_
и wp_ajax_nopriv_
для регистрации наших функций.
add_action( 'wp_ajax_send_form', 'send_form' ); add_action( 'wp_ajax_nopriv_send_form', 'send_form' ); function send_form() { $message = ''; $result['success'] = false; foreach ($_POST as $key => $value) { if ($key == '_wpnonce' || $key == 'agree' || $key == 'form_type' || $key == 'email_to') { continue; } $message .= "<b>{$key}</b>: {$value}<br>"; } $post_title = $_POST['title']; $email_to = $_POST['email_to']; $data = [ 'post_type' => 'forms', 'post_status' => 'publish', 'post_title' => $post_title, 'post_content' => $message, ]; $inserted_post_id = wp_insert_post($data); if (wp_verify_nonce($_REQUEST['_wpnonce'], $_SERVER['REMOTE_ADDR'])) { wp_mail($email_to, $_POST['title'], $message); $result['success'] = true; echo json_encode($result); } die(); }
Создание формы
Теперь создадим HTML-форму, которая будет отправлять данные через AJAX.
<form id="my-form" method="post"> <input type="text" name="name" placeholder="Ваше имя" required> <input type="email" name="email" placeholder="Ваш email" required> <input type="hidden" name="action" value="send_form"> <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce($_SERVER['REMOTE_ADDR']); ?>"> <input type="hidden" name="title" value="Новая форма"> <input type="hidden" name="email_to" value="example@example.com"> <button type="submit">Отправить</button> </form>
Добавление JavaScript для обработки отправки формы
jQuery(document).ready(function($) { $('#my-form').on('submit', function(e) { e.preventDefault(); var formData = $(this).serialize(); $.ajax({ url: ajaxurl, type: 'POST', data: formData, success: function(response) { var result = JSON.parse(response); if (result.success) { alert('Форма успешно отправлена!'); } else { alert('Ошибка при отправке формы.'); } }, error: function() { alert('Ошибка при отправке формы.'); } }); }); });
Подключение JavaScript к WordPress
Убедитесь, что ваш JavaScript-код подключен к WordPress. Вы можете добавить его в файл functions.php вашей темы или плагина.
function enqueue_custom_scripts() { wp_enqueue_script('custom-ajax', get_template_directory_uri() . '/js/custom-ajax.js', array('jquery'), null, true); wp_localize_script('custom-ajax', 'ajaxurl', admin_url('admin-ajax.php')); } add_action('wp_enqueue_scripts', 'enqueue_custom_scripts');
Преимущества использования AJAX для отправки формы
Улучшенный пользовательский опыт: AJAX позволяет отправлять формы без перезагрузки страницы, что делает взаимодействие с пользователем более плавным.
Быстрота: AJAX-запросы выполняются быстрее, так как не требуют полной перезагрузки страницы.
Безопасность: Использование wp_verify_nonce помогает предотвратить CSRF-атаки.