WordPress DemoSite

Тестовый сайт для экспериментов и демонстраций возможностей

Создание AJAX-обработчиков в WordPress (wp_ajax_ / wp_ajax_nopriv_)

В WordPress для обработки AJAX-запросов используются специальные хуки wp_ajax_* (для авторизованных пользователей) и wp_ajax_nopriv_* (для неавторизованных пользователей).

Основной синтаксис

// Для авторизованных пользователей
add_action('wp_ajax_my_action', 'my_action_callback');

// Для неавторизованных пользователей
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');

function my_action_callback() {
    // Проверка nonce для безопасности
    check_ajax_referer('my_nonce', 'security');

    // Обработка данных
    $data = $_POST['data'];

    // Возврат результата
    wp_send_json_success($data);

    // Или в случае ошибки
    // wp_send_json_error('Сообщение об ошибке');

    // Обязательно завершаем выполнение
    wp_die();
}

Полный пример реализации

1. JavaScript часть (отправка запроса)

jQuery(document).ready(function($) {
    $('#my-button').on('click', function() {
        $.ajax({
            url: ajaxurl, // ajaxurl определён в WordPress для админки
            type: 'POST',
            data: {
                action: 'my_action',
                security: my_ajax_obj.nonce, // передаём nonce
                data: 'some data to process'
            },
            success: function(response) {
                if (response.success) {
                    console.log('Успех:', response.data);
                } else {
                    console.error('Ошибка:', response.data);
                }
            },
            error: function(xhr, status, error) {
                console.error('AJAX ошибка:', error);
            }
        });
    });
});

2. PHP часть (обработка запроса)

// Регистрируем скрипт и передаём параметры
add_action('wp_enqueue_scripts', 'my_ajax_scripts');
function my_ajax_scripts() {
    wp_enqueue_script('my-ajax-script', get_template_directory_uri() . '/js/my-ajax.js', array('jquery'), null, true);

    wp_localize_script('my-ajax-script', 'my_ajax_obj', array(
        'ajaxurl' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('my_nonce')
    ));
}

// Обработчик для авторизованных пользователей
add_action('wp_ajax_my_action', 'my_action_callback');

// Обработчик для неавторизованных пользователей
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');

function my_action_callback() {
    // Проверка nonce
    check_ajax_referer('my_nonce', 'security');

    // Обработка данных
    $data = isset($_POST['data']) ? sanitize_text_field($_POST['data']) : '';

    // Пример обработки
    if (empty($data)) {
        wp_send_json_error('Данные не получены');
    }

    // Какая-то логика
    $processed_data = strtoupper($data);

    // Возвращаем результат
    wp_send_json_success($processed_data);
}

Важные моменты

  1. Безопасность:
  1. Производительность:
  1. Обработка ошибок:
  1. Завершение скрипта:

Альтернативные методы возврата данных

Вместо wp_send_json_success() и wp_send_json_error() можно использовать:

// Произвольный JSON ответ
wp_send_json(array(
    'success' => true,
    'data' => $data
));

// Или вручную
header('Content-Type: application/json');
echo json_encode($data);
wp_die();

Таким образом, WordPress предоставляет удобные инструменты для создания безопасных и эффективных AJAX-обработчиков.

Полный стэк: .NET | Agile | AJAX | AMQP | Android | api | Bash | Bootstrap | C++ | cms | Composer | css | Data | Elasticsearch | email | ERP | ESP32 | Fenom | Git | GraphQL | Gulp | JavaScript | JetStream | Joomla | js | Kotlin | Laravel | Lean | LEMP | Linux | LMS | Markdown | MODX | Moodle | MySQL | NATS | Nginx | Node.js | OpenCart | Parsedown | PHP | Python | RabbitMQ | Scrum | SCSS | SEO | Simpla | SLA | SOAP | Sphinx | SQL | startup | Swift | Symfony | Tailwind | Translation | Twig | Ubuntu | Unit | W3C | Waterfall | web3 | Webasyst | Webpack | WebSocket | Wishlist | WooCommerce | WordPress | XML | Автоматизация | Безопасность | Бизнес | блокчейн | Вёрстка | движок | ИИ | интернет-магазин | ЛК | Руководство | ТЗ | фреймворк | шаблонизатор | Яндекс.Трекер