Как изменить URL адрес AJAX в WordPress

|

В WordPress AJAX-запросы по умолчанию отправляются на URL admin-ajax.php, расположенный в каталоге wp-admin. Это может быть неудобно или нежелательно по ряду причин: безопасность, производительность, SEO или просто желание структурировать код и маршруты по-своему. В этой статье подробно разберём, как изменить URL AJAX-запроса в WordPress, какие задачи это решает, и приведём практические примеры с кодом.

Почему менять URL AJAX в WordPress важно? Дополнительные ключевые слова: безопасность AJAX WordPress, пользовательские AJAX эндпоинты

Стандартный AJAX в WordPress использует admin-ajax.php, что создаёт несколько проблем:

Изменение URL для AJAX позволяет создавать более безопасные, быстрые и удобные в поддержке решения.

Как работает AJAX в WordPress: базовый обзор

Для начала напомним, что при стандартном подходе AJAX-запросы отправляются на wp-admin/admin-ajax.php с параметром action. Этот параметр указывает, какой обработчик вызовется. Пример отправки запроса на jQuery:

jQuery.post(ajaxurl, { action: 'yelly_custom_action', data: someData }, function(response) {
    console.log(response);
});

В PHP нужно зарегистрировать обработчик через хуки:

add_action('wp_ajax_yelly_custom_action', 'yelly_handle_custom_action');
add_action('wp_ajax_nopriv_yelly_custom_action', 'yelly_handle_custom_action');

function yelly_handle_custom_action() {
    // Обработка запроса
    wp_send_json_success(['message' => 'Данные получены']);
}

Этот подход работает, но URL фиксирован.

Создание собственного AJAX эндпоинта в WordPress через rewrite API

Чтобы изменить URL, можно создать собственный маршрут с помощью add_rewrite_rule и обработать запрос через собственную функцию. Это позволит использовать удобный и понятный URL, например, /ajax/yelly-action/.

Пример добавления rewrite правила:

function yelly_add_ajax_rewrite() {
    add_rewrite_rule('^ajax/yelly-action/?$', 'index.php?yelly_ajax=1', 'top');
}
add_action('init', 'yelly_add_ajax_rewrite');

function yelly_add_query_vars($vars) {
    $vars[] = 'yelly_ajax';
    return $vars;
}
add_filter('query_vars', 'yelly_add_query_vars');

function yelly_template_redirect() {
    if (get_query_var('yelly_ajax')) {
        yelly_handle_custom_action();
        exit;
    }
}
add_action('template_redirect', 'yelly_template_redirect');

После сохранения правил перезапустите постоянные ссылки в настройках WordPress (сохранив их) для обновления .htaccess.

Пример обработчика AJAX на новом URL

Используем ту же функцию yelly_handle_custom_action, что и ранее, но теперь запросы идут на /ajax/yelly-action/. Можно отправлять POST или GET:

jQuery.ajax({
    url: '/ajax/yelly-action/',
    type: 'POST',
    data: { param1: 'value1' },
    success: function(response) {
        console.log(response);
    }
});

В PHP обработчик:

function yelly_handle_custom_action() {
    // Проверка nonce, прав и данных
    if (!isset($_POST['param1'])) {
        wp_send_json_error('Отсутствует параметр param1');
    }
    $param = sanitize_text_field($_POST['param1']);
    // Выполнение логики
    wp_send_json_success(['received' => $param]);
}

Плюсы и минусы собственного AJAX маршрута

Плюсы:

Минусы:

Использование REST API как альтернативы AJAX с кастомным маршрутом

Если задача — создавать современные AJAX-запросы, рекомендуем рассмотреть WordPress REST API. Он позволяет создавать собственные маршруты с полноценной документацией и удобным механизмом аутентификации.

Пример регистрации REST-эндпоинта:

function yelly_register_rest_route() {
    register_rest_route('yelly/v1', '/custom-action/', [
        'methods' => 'POST',
        'callback' => 'yelly_rest_custom_action',
        'permission_callback' => function () {
            return current_user_can('edit_posts'); // пример проверки прав
        }
    ]);
}
add_action('rest_api_init', 'yelly_register_rest_route');

function yelly_rest_custom_action(WP_REST_Request $request) {
    $param = $request->get_param('param1');
    if (!$param) {
        return new WP_REST_Response(['error' => 'Missing param1'], 400);
    }
    // Логика
    return new WP_REST_Response(['received' => sanitize_text_field($param)], 200);
}

Запрос из JS:

fetch('/wp-json/yelly/v1/custom-action/', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ param1: 'value1' })
})
.then(response => response.json())
.then(data => console.log(data));

Полезные плагины для работы с AJAX и REST API в WordPress

Для упрощения создания и отладки AJAX и REST API в WordPress можно использовать плагины:

Советы по безопасности AJAX-запросов на кастомных URL

При изменении URL AJAX важно не забывать про безопасность:

Итог: стоит ли менять AJAX URL в WordPress?

Если вы хотите повысить безопасность, разграничить логику, улучшить структуру кода или интегрировать AJAX в REST API, создание собственного маршрута — отличный путь. В статье показаны способы реализации и примеры кода, которые помогут начать работу с кастомными AJAX URL в WordPress быстро и безопасно.

Как полностью удалить остаточные файлы и записи после удаления продуктов в WooCommerce
26.05.2026
Как удалить или скрыть адрес email в WordPress от спама: практические решения
29.12.2025
Как создать динамический каталог товаров на WordPress с фильтрами и AJAX
18.12.2025
Как отложить обновление тем и плагинов в WordPress: практические решения
15.02.2026
Как создать и использовать WordPress REST API для начинающих: практические примеры и советы
13.11.2025
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙