web-dev-qa-db-ja.com

なぜadmin-ajax.phpを使うのですか?

私のAjaxでのjsonデータの呼び出しは、このfunctions.phpのようにうまくいきます。

add_action( 'wp_ajax_nopriv_load-filter', 'prefix_load_cat_posts' );
add_action( 'wp_ajax_load-filter', 'prefix_load_cat_posts' );
function prefix_load_cat_posts () {
  //get data here
}

javaScript:

var ajaxurl = 'http://'+window.location.Host+'/wp-admin/admin-ajax.php';
jQuery.ajax({
    type: 'POST',
    url: ajaxurl,
    etc.

私は2つ質問があります。

1)jsonをthemes/example/json.phpのような別のファイルにエンコードする代わりにadmin-ajax.phpを使用して、そこでデータをエンコードするのはなぜですか?

2)admin-ajax.phpはどのように機能しますか?そのファイルからあまり理解できません。あなたはそれらを使用する準備ができているのでそれはすべての機能をロードしますか?

ありがとうございます。

7
Claudiu Creanga

1)jsonをadmin-ajax.phpのような別のファイルにエンコードする代わりにthemes/example/json.phpを使用して、そこでデータをエンコードするのはなぜですか?

admin-ajax.phpを使用することはWordPressコアがロードされて利用可能であることを意味します。それでも、必要なファイルを手動でロードする必要があります。これは複雑なプロセスで、Coreをあまりよく知らないと失敗する傾向があります。そして、Javascriptのセキュリティはどの程度上手ですか?

2)admin-ajax.phpはどのように機能しますか?そのファイルからあまり理解できません。あなたはそれらを使用する準備ができているのでそれはすべての機能をロードしますか?

  1. これはWordPress Coreをロードします。つまり$wpdb$WP_Queryのようなものを使うことができます。 25行目までです。
  2. それはいくつかのヘッダ、37〜41行目を送る。
    1. コンテンツタイプヘッダ
    2. 結果をキャッシュしないようにブラウザに指示するためのヘッダ
    3. おもしろいヘッダーは send_nosniff_headers() で送られるものです。
    4. nocache_headers()
  3. admin_initフックが起動します。
  4. コアアクションは動的に定義され登録されます - 46 - 73行目。これらは必要でない限り、つまり$_GETまたは$_POSTを通してリクエストされない限り登録されません。
  5. "ハートビート" APIフックが起動します - 75行目
  6. 要求しているユーザーの「ログイン」状況が検査され、適切な管理フックまたは「特権なし」フックが起動されます。

私の意見では、#1と#6がAJAX AP​​Iを使用する主な理由です。あなたはWordPress Coreを持っていて、それはあなたがほぼ確実に必要としています、そしてあなたはWordPressの他の部分と同じログインセキュリティシステムを持っています。

11
s_ha_dum

admin-ajax.phpはWordPress AJAX AP​​I の一部であり、はい、バックエンドとフロントの両方からのリクエストを処理します。ここに私はあなたの質問のために把握しているものです:

2)admin-ajax.phpはどのように機能しますか?

logic については、こちらをご覧ください。

これはあなたがすでにJavaScriptなどをエンキューする方法を知っていることを前提としています。

JavaScriptのピース:

jQuery(document).ready(function($) {

    // We'll pass this variable to the PHP function example_ajax_request
    var fruit = 'Banana';

    // This does the ajax request
    $.ajax({
        url: ajaxurl,
        data: {
            'action':'example_ajax_request',
            'fruit' : fruit
        },
        success:function(data) {
            // This outputs the result of the ajax request
            console.log(data);
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });   

});

PHP Piece:

function example_ajax_request() {

    // The $_REQUEST contains all the data sent via ajax 
    if ( isset($_REQUEST) ) {

        $fruit = $_REQUEST['fruit'];

        // Let's take the data that was sent and do something with it
        if ( $fruit == 'Banana' ) {
            $fruit = 'Apple';
        }

        // Now we'll return it to the javascript function
        // Anything outputted will be returned in the response
        echo $fruit;

        // If you're debugging, it might be useful to see what was sent in the $_REQUEST
        // print_r($_REQUEST);

    }

    // Always die in functions echoing ajax content
   die();
}

add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );

// If you wanted to also use the function for non-logged in users (in a theme for example)
 add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );

1)jsonをthemes/example/json.phpのような別のファイルにエンコードする代わりにadmin-ajax.phpを使用してデータをエンコードするのはなぜですか?

これが役に立つかもしれません。 admin-ajax.php対Ajaxリクエスト用のカスタムページテンプレート _

5
sohan