Вопрос или проблема
Мне нужно найти ошибку на сайте WordPress.
Но я не могу найти метод (функцию), которую AJAX GET вызывает на бэкенде.
Это не часть администрирования сайта, а часть фронтенда.
важно
Я нашел URL, на который отправляется AJAX-запрос, но не знаю, как найти метод/функцию.
код для отправки AJAX-запроса выглядит так
У меня есть код для отправки XMLHttpRequest, что-то вроде этого:
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://themes.qnimate.com/qplog/wp-admin/admin-ajax.php?action=logged_in_check");
xhr.setRequestHeader("X_REQUESTED_WITH","xmlhttprequest");
xhr.onload = function(){
console.log(xhr.responseText);
}
xhr.send();
На фронтенде нет ничего похожего на add_action().
Что можете посоветовать?
Какие-то техники, советы?
Если URL выглядит как admin-ajax.php?example_ajax_request=1&data=1234
Функция add_action в коде будет wp_ajax_nopriv_example_ajax_request
Поэтому попробуйте выполнить grep по всему каталогу вашей темы или каталогу плагина для этого текста.
Пример: grep -r 'wp_ajax_nopriv_example_ajax_request' *
Второй параметр функции add_action – это имя функции, которое вы ищете.
Смотрите https://codex.wordpress.org/AJAX_in_Plugins#Ajax_on_the_Viewer-Facing_Side для примера того, как это работает.
Ответ или решение
Ваша задача заключается в поиске метода, который обрабатывает AJAX-запросы на стороне сервера в сайтe на WordPress. Давайте рассмотрим подход, который можно использовать для решения этой задачи.
Теория
AJAX-запросы в WordPress обычно обрабатываются с помощью admin-ajax.php
. Для корректной обработки GET-запросов на фронтальной части сайта необходимо создать специальный хук с использованием функции add_action()
. В случае фронтенда вы будете работать с привязками wp_ajax_nopriv_{action}
и wp_ajax_{action}
, где {action}
соответствует значению, переданному в параметре action
AJAX-запроса.
Пример
В вашем случае у вас есть строка запроса в формате:
http://themes.qnimate.com/qplog/wp-admin/admin-ajax.php?action=logged_in_check
Для обработки этого запроса на стороне сервера нужно найти место в коде, где реализован вызов:
add_action('wp_ajax_nopriv_logged_in_check', 'function_name');
add_action('wp_ajax_logged_in_check', 'function_name');
Где function_name
— это метод, который обрабатывает AJAX-запрос. Он будет реализован в вашей теме или плагине.
Применение
-
Поиск по коду: Используйте команду
grep
или аналогичный инструмент поиска текста по коду. Например:grep -r 'wp_ajax_nopriv_logged_in_check' *
Выполните данный поиск в директории вашей темы и плагинов, чтобы определить, где именно зарегистрирован нужный хук.
-
Проверка результатов: После нахождения нужного
add_action()
, посмотрите на вторую переменную и проверьте тело соответствующей функции, чтобы увидеть, что она выполняет. -
Анализ функции: Исследуйте логику внутри найденной функции, чтобы понять, как запрос обрабатывается и где может скрываться баг.
Этот подход позволит вам не только найти функцию, обрабатывающую запрос, но и изучить её логику, чтобы выявить и исправить ошибки. Полезно также изучить официальную документацию WordPress по работе с AJAX, чтобы лучше понять, как должны работать AJAX-запросы.
Успеха в отладке!