とにかく、現在のサーバー操作がWordPressのAJAXリクエストであるかどうかを検出する方法はありますか?
例えば:
is_ajax()
AJAX codexで推奨 を使用している場合、DOING_AJAX
絶え間ない:
if (defined('DOING_AJAX') && DOING_AJAX) { /* it's an AJAX call */ }
WordPress 4.7はAJAXリクエストをチェックする簡単な方法を導入したので、この古い質問に追加すると思いました。
wp_doing_ajax()
開発者リファレンス から:
説明:現在のリクエストがWordPress Ajaxリクエストであるかどうかを判断します。
Return:(ブール値)WordPress Ajaxリクエストの場合はtrue、そうでない場合は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;
}
私はこれが古いスレッドであることを知っていますが、受け入れられた答えに問題があります、
リクエストが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
}