現在のサーバー操作が現在WordPressのAJAXリクエストであるかどうかを検出する方法はありますか?
例えば:
is_ajax()
更新:WordPress 4.7.0以降、関数wp_doing_ajax()を呼び出すことができます。これは、「Ajaxを実行する」プラグインが「false」を「true」に変換するためにフィルタリングできるため、望ましい方法です。
元の答え:
コーデックスで推奨されているようにAjaxを使用している場合は、DOING_AJAX
定数をテストできます。
if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an Ajax call */ }
WordPress 4.7ではAJAXリクエストをチェックする簡単な方法が導入されているので、この古い質問に追加したいと思いました。
wp_doing_ajax()
開発者リファレンスから:
説明:現在のリクエストがWordPressAjaxリクエストであるかどうかを判別します。
戻り値:(ブール値)WordPress Ajaxリクエストの場合はtrue、それ以外の場合はfalse。
これは基本的にDOING_AJAXのラッパーです。
現在のリクエストがjsライブラリ(jQueryなど)から送信されたAJAXリクエストであるかどうかを確認するには、次のような方法を試すことができます。
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;
}
これは古いスレッドですが、受け入れられた回答に問題があります。
admin-ajax.phpファイルに対するリクエストの場合、定義されたDOING_AJAX定数のチェックは常にtrueになります。(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
}