Нужно ли в любом случае определить, является ли текущая операция сервера в настоящее время запросом 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. }
(прокомментировал бы … но не представился)