web-dev-qa-db-ja.com

AjaxはWordPress

とにかく、現在のサーバー操作がWordPressのAJAXリクエストであるかどうかを検出する方法はありますか?

例えば:

is_ajax()
38
Racura

AJAX codexで推奨 を使用している場合、DOING_AJAX 絶え間ない:

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

WordPress 4.7はAJAXリクエストをチェックする簡単な方法を導入したので、この古い質問に追加すると思いました。

wp_doing_ajax()

開発者リファレンス から:

  • 説明:現在のリクエストがWordPress Ajaxリクエストであるかどうかを判断します。

  • Return:(ブール値)WordPress Ajaxリクエストの場合はtrue、そうでない場合はfalse。

基本的に、DOING_AJAXのラッパーです。

24
Nate Weller

現在のリクエストが[〜#〜] ajax [〜#〜] jsライブラリから送信されたリクエスト(jQueryなど)であるかどうかを確認するには、次のようなものを試すことができます。 :

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

WordPressにこの機能があるかどうかはわかりませんが、自分で簡単なものを作成することで実行できます。

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
    // Is AJAX request
    return true; 
}
5
Ian Brindley

私はこれが古いスレッドであることを知っていますが、受け入れられた答えに問題があります、

リクエストが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' );
    }
}
4
adamj

個人的にはwp_doing_ajax()を好みますが、これを行うべき別の例を次に示します。

if( true === strpos( $_SERVER[ 'REQUEST_URI' ], 'wp-admin/admin-ajax.php' ) ) {
    // is doing ajax
}
0
Kuliraj