Есть ли в любом случае, чтобы определить, является ли текущая операция сервера в настоящее время запросом AJAX в WordPress?
Например:
is_ajax()
Есть ли в любом случае, чтобы определить, является ли текущая операция сервера в настоящее время запросом AJAX в WordPress?
Например:
is_ajax()
Обновление: начиная с WordPress 4.7.0 вы можете вызывать функцию wp_doing_ajax(). Это предпочтительно, потому что плагины, которые "делают Ajax" по-другому, могут фильтровать, чтобы превратить "ложь" в "истину".
Оригинальный ответ:
Если вы используете Ajax в соответствии с рекомендациями кодекса, вы можете проверить константу DOING_AJAX
:
if (defined('DOING_AJAX') && DOING_AJAX) { /* it an Ajax call */ }
WordPress 4.7 предоставил простой способ проверить запросы AJAX, поэтому я подумал, что добавлю к этому старому вопросу.
wp_doing_ajax()
Описание: Определяет, является ли текущий запрос запросом WordPress Ajax.
Возврат: (bool) Истина, если это запрос Ajax WordPress, в противном случае - false.
Это, по сути, оболочка для DOING_AJAX.
Чтобы узнать, является ли текущий запрос AJAX запросом, отправленным из библиотеки js (например, jQuery), вы можете попробовать что-то вроде этого:
if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
//This is an ajax request.
}
Я не уверен, что для WordPress есть функция для этого, но это можно сделать, создав простой.
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
// Is AJAX request
return true;
}
Я знаю, что это старая ветка, но есть проблема с принятым ответом,
Проверка определенной константы DOING_AJAX всегда будет выполняться, если запрос к файлу admin-ajax.php. (https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php#L16)
Иногда перехватчики admin-ajax.php не используются для запроса AJAX, это просто простая конечная точка (например, Paypal IPN).
Иан и Спенсер упомянули правильный путь.
if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) &&
strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) {
//This is an ajax request.
}
(прокомментировал бы... но без представителя)
if ( ! function_exists('is_ajax') ) {
function is_ajax() {
return defined( 'DOING_AJAX' );
}
}
Я лично предпочитаю wp_doing_ajax()
, но вот еще один пример, который должен это сделать.
if( true === strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin/admin-ajax.php' ) ) {
// is doing ajax
}