Является Ajax в WordPress

Нужно ли в любом случае определить, является ли текущая операция сервера в настоящее время запросом AJAX в WordPress?

Например:

is_ajax() 

Если вы используете AJAX, как рекомендовано в кодексе , вы можете протестировать константу DOING_AJAX :

 if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an AJAX call */ } 

Чтобы узнать, является ли текущий запрос AJAX- запросом, отправленным из библиотеки js (например, jQuery ), вы можете попробовать что-то вроде этого:

 if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) && strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) { //This is an ajax request. } 

WordPress 4.7 представила простой способ проверить запросы AJAX, поэтому я подумал, что добавлю к этому старому вопросу.

 wp_doing_ajax() 

Из справочника разработчиков :

  • Описание: Определяет, является ли текущий запрос запросом WordPress Ajax.

  • Возврат: (bool) Истинно, если это запрос Ajax WordPress, в противном случае false.

Это, по сути, обертка для DOING_AJAX.

Я не уверен, что для WordPress есть функция для этого, но это можно сделать, создав простой.

 if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { // Is AJAX request return true; } 
 if ( ! function_exists('is_ajax') ) { function is_ajax() { return defined( 'DOING_AJAX' ); } } 

Я знаю, что это старый поток, но есть проблема с принятым ответом,

Проверка для определенной константы DOING_AJAX всегда будет истиной, если запрос принадлежит файлу admin-ajax.php. ( https://core.trac.wordpress.org/browser/tags/4.4.2/src/wp-admin/admin-ajax.php#L16 )

Иногда hook-ajax.php не используются для запроса AJAX, просто простая конечная точка (например, IPN Paypal).

Правильный способ – это то, о чем упоминали Иэн и Спенсер.

 if( ! empty( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ] ) && strtolower( $_SERVER[ 'HTTP_X_REQUESTED_WITH' ]) == 'xmlhttprequest' ) { //This is an ajax request. } 

(прокомментировал бы … но не представился)