Как изменить URL AJAX в WordPress: практические решения и примеры

|

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

Зачем менять URL AJAX в WordPress?

Стандартный URL для AJAX запросов — wp-admin/admin-ajax.php. Его недостатки:

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

Как работает AJAX в WordPress: основы

Для работы AJAX в WordPress обычно используют хук wp_ajax_{action} и wp_ajax_nopriv_{action} для авторизованных и неавторизованных пользователей соответственно. Пример простой реализации:

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

function yelly_custom_action_callback() {
    // Обработка запроса
    wp_send_json_success(['message' => 'Привет из AJAX!']);
}

JavaScript для вызова AJAX:

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

Здесь ajaxurl — глобальная переменная, указывающая на admin-ajax.php.

Способы изменить URL AJAX в WordPress

Рассмотрим несколько популярных способов:

1. Использование кастомного endpoint через add_rewrite_rule

Можно создать свой пользовательский URL и обработать AJAX запрос непосредственно в шаблоне или через REST API.

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

function yelly_add_custom_ajax_endpoint() {
    add_rewrite_rule('^custom-ajax-endpoint/?$', 'index.php?custom_ajax=1', 'top');
}
add_action('init', 'yelly_add_custom_ajax_endpoint');

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

function yelly_template_redirect() {
    if (get_query_var('custom_ajax') == 1) {
        // Проверка nonce, если нужно
        // Обработка AJAX запроса
        wp_send_json_success(['message' => 'Ответ с кастомного URL']);
        exit;
    }
}
add_action('template_redirect', 'yelly_template_redirect');

После добавления правила нужно обновить постоянные ссылки в админке WordPress (Настройки — Постоянные ссылки).

2. Использование REST API для AJAX запросов

REST API в WordPress – современный и удобный способ работы с AJAX, который позволяет создавать свои endpoint'ы с гибкой маршрутизацией.

Пример регистрации собственного REST endpoint:

add_action('rest_api_init', function () {
    register_rest_route('yelly/v1', '/custom-action', [
        'methods' => 'POST',
        'callback' => 'yelly_rest_custom_action',
        'permission_callback' => '__return_true',
    ]);
});

function yelly_rest_custom_action(\WP_REST_Request $request) {
    $params = $request->get_params();
    // Логика обработки
    return new \WP_REST_Response(['message' => 'Ответ с REST API'], 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.message));

3. Перенаправление запросов с помощью .htaccess или nginx

Можно настроить сервер для перенаправления запросов с кастомного URL на admin-ajax.php. Это не меняет внутреннюю работу WordPress, но маскирует URL.

Пример для Apache в .htaccess:

RewriteEngine On
RewriteRule ^my-ajax-endpoint/?$ wp-admin/admin-ajax.php [QSA,L]

Для nginx:

location /my-ajax-endpoint/ {
    rewrite ^/my-ajax-endpoint/?$ /wp-admin/admin-ajax.php last;
}

После этого в JS можно использовать /my-ajax-endpoint/ вместо стандартного.

Практическая реализация: как изменить URL AJAX на кастомный с помощью rewrite правила

Создадим плагин или вставим в functions.php следующий код:

function yelly_add_custom_ajax_endpoint() {
    add_rewrite_rule('^ajax-custom-endpoint/?$', 'index.php?ajax_custom=1', 'top');
}
add_action('init', 'yelly_add_custom_ajax_endpoint');

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

function yelly_handle_custom_ajax() {
    if (get_query_var('ajax_custom') == 1) {
        // Проверим nonce для безопасности
        $nonce = $_POST['nonce'] ?? '';
        if (!wp_verify_nonce($nonce, 'yelly_custom_nonce')) {
            wp_send_json_error(['message' => 'Неверный nonce']);
            exit;
        }
        // Обработка данных
        $data = $_POST['data'] ?? 'нет данных';
        wp_send_json_success(['received' => $data]);
        exit;
    }
}
add_action('template_redirect', 'yelly_handle_custom_ajax');

В JS вставим:

jQuery.post('/ajax-custom-endpoint/', {
    nonce: yelly_vars.nonce,
    data: 'Пример данных'
}, function(response) {
    if (response.success) {
        console.log('Ответ: ', response.data.received);
    } else {
        console.error('Ошибка: ', response.data.message);
    }
});

И не забудьте локализовать скрипт, чтобы передать nonce:

wp_localize_script('your-script-handle', 'yelly_vars', [
    'nonce' => wp_create_nonce('yelly_custom_nonce'),
]);

Использование плагинов для удобной настройки AJAX URL

Если вы не хотите писать код самостоятельно, можно воспользоваться плагинами, которые расширяют работу с AJAX или создают кастомные API:

Использование таких плагинов подходит для тех, кто хочет быстро реализовать защиту или расширение AJAX без глубоких знаний.

Рекомендации и безопасность при изменении AJAX URL

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

Только соблюдение этих правил обеспечит надежную и гибкую работу AJAX в WordPress с измененным URL.

Как отключить автостарт WP-Cron для оптимизации сайта WordPress
22.02.2026
Как автоматизировать управление медиа-содержимым в WordPress: практические решения и примеры
31.01.2026
Как создать автоматические уведомления в WordPress с помощью WPRemark
16.04.2026
Как изменить URL AJAX в WordPress: практические решения и примеры
04.03.2026
Как удалить или изменить атрибуты ALT у изображений в WordPress для оптимизации
28.02.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее