Если вы разрабатываете сайт на 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-атаки.

Разработка сайтов на Wordpress