Как изменить адрес AJAX в WordPress без перезагрузки страницы

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

Почему стоит изменить стандартный AJAX-адрес в WordPress

Стандартный адрес AJAX в WordPress — wp-admin/admin-ajax.php. Он хорошо работает, но имеет ряд недостатков:

  • Общедоступный адрес может стать целью для атак или злоупотреблений.
  • При большом числе AJAX-запросов нагрузка на admin-ajax.php может ухудшать производительность сайта.
  • Некоторые хостинги ограничивают доступ к wp-admin, что мешает корректной работе AJAX.

Изменив адрес AJAX, можно повысить безопасность, разгрузить сервер или внедрить более гибкую архитектуру. При этом важно сделать это без перезагрузки страницы и с сохранением удобства разработки.

Как изменить URL AJAX-запросов на фронтенде (JavaScript)

По умолчанию WordPress передаёт адрес AJAX в JavaScript через локализацию скриптов, например, объект ajaxurl. Чтобы изменить адрес, нужно переопределить этот объект или создать собственный.

Вот пример, как это сделать в теме или плагине:

function wptem_enqueue_scripts() {
    wp_enqueue_script('wptem-ajax-script', get_template_directory_uri() . '/js/ajax.js', array('jquery'), null, true);
    wp_localize_script('wptem-ajax-script', 'wptem_ajax_obj', array(
        'ajax_url' => home_url('/custom-ajax-endpoint/')
    ));
}
add_action('wp_enqueue_scripts', 'wptem_enqueue_scripts');

В JavaScript можно использовать переданный адрес:

jQuery(document).ready(function($) {
    $.ajax({
        url: wptem_ajax_obj.ajax_url,
        type: 'POST',
        data: {
            action: 'wptem_custom_action',
            param1: 'value1'
        },
        success: function(response) {
            console.log('Ответ сервера:', response);
        }
    });
});

Так мы полностью контролируем, куда уходят AJAX-запросы.

Как настроить обработку новых AJAX-запросов на сервере WordPress

Чтобы обработать запросы, направленные на новый адрес, нужно зарегистрировать новый endpoint и перехватить запросы на сервере.

Создадим rewrite правило и обработчик:

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

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

function wptem_template_redirect() {
    if (get_query_var('custom_ajax')) {
        // Проверка nonce и прав доступа
        if (!isset($_POST['action'])) {
            wp_send_json_error('Не указан параметр action');
            exit;
        }
        $action = sanitize_text_field($_POST['action']);
        // Вызов зарегистрированных обработчиков
        do_action('wp_ajax_' . $action);
        do_action('wp_ajax_nopriv_' . $action);
        exit;
    }
}
add_action('template_redirect', 'wptem_template_redirect');

После этого добавляем обработчик для действия:

function wptem_handle_custom_action() {
    // Пример обработки
    $param1 = isset($_POST['param1']) ? sanitize_text_field($_POST['param1']) : '';
    wp_send_json_success(array('received_param1' => $param1));
}
add_action('wp_ajax_wptem_custom_action', 'wptem_handle_custom_action');
add_action('wp_ajax_nopriv_wptem_custom_action', 'wptem_handle_custom_action');

Не забудьте обновить правила перезаписи через админку (Настройки > Постоянные ссылки) или программно:

flush_rewrite_rules();

Плюсы и минусы такого подхода

Плюсы:

  • Уникальный адрес AJAX, скрывающий стандартный admin-ajax.php.
  • Гибкость в организации логики обработки запросов.
  • Меньшая нагрузка на wp-admin.

Минусы:

  • Сложность настройки и поддержки.
  • Необходимость обновления rewrite правил.
  • Потенциальные конфликты с другими правилами .htaccess.

Как использовать плагины для изменения AJAX-адреса в WordPress

Существуют плагины, которые позволяют изменить адрес AJAX без сложных настроек. Например, Clearfy Pro из каталога WPSHOP содержит опции для скрытия и изменения стандартных URL, включая AJAX.

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

Как обеспечить безопасность при изменении адреса AJAX

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

  • Используйте wp_verify_nonce для проверки nonce-токена в запросах.
  • Проверяйте права текущего пользователя, если запрос затрагивает приватные данные.
  • Санитизируйте все входящие данные перед обработкой.

Пример проверки nonce:

function wptem_handle_custom_action() {
    if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'wptem_nonce_action')) {
        wp_send_json_error('Неверный токен безопасности');
        exit;
    }
    // Обработка запроса
    $param1 = sanitize_text_field($_POST['param1']);
    wp_send_json_success(array('param1' => $param1));
}

Не забывайте передавать nonce в AJAX-запросах:

wp_localize_script('wptem-ajax-script', 'wptem_ajax_obj', array(
    'ajax_url' => home_url('/custom-ajax-endpoint/'),
    'nonce' => wp_create_nonce('wptem_nonce_action')
));

Итоги: пошаговый план по изменению AJAX-адреса в WordPress

  1. Регистрируем новый endpoint через rewrite правила.
  2. Добавляем обработку запроса на сервере через хуки.
  3. Локализуем скрипты, передавая новый адрес в JS.
  4. Обеспечиваем безопасность с помощью nonce и проверки прав.
  5. Тестируем работу AJAX без перезагрузки страницы.

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

Как сделать динамические таблицы в WordPress без плагинов
09.03.2026
Как сделать автоматический импорт товара из Excel в WordPress
01.03.2026
Как удалить и избавиться от пустых записей в базе данных WordPress
04.01.2026
Как автоматизировать удаление старого контента в WordPress
03.04.2026
Как создать автоматический импорт товара из Excel в WordPress
07.04.2026