Neden admin-ajax.php kullanılır ve nasıl çalışır?


9

Json verileri için ajax çağrım bu işlevler gibi çalışıyor.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 sorum var.

1) Json'unuzu gibi ayrı bir dosyada themes/example/json.phpkodlamak yerine verilerinizi orada kodlamak yerine neden admin-ajax.php kullanıyorsunuz ?

2) admin-ajax.php nasıl çalışır? O dosyadan fazla anlamıyorum. Kullanmaya hazır olmak için tüm işlevleri yüklüyor mu?

Teşekkürler!


2
Not, herhangi bir cevap neden themes/example/json.phpbüyük bir güvenlik açığı olarak düşünülmesi gerektiği hakkında konuşacaktır
Tom J Nowell

Yanıtlar:


14

1) admin-ajax.phpJson'unuzu themes/example/json.php, verilerinizi orada gibi ayrı bir dosyada kodlamak yerine neden kullanmalısınız ?

Kullanmak admin-ajax.php, WordPress Core'un yüklü ve kullanılabilir olduğu anlamına gelir. Bu olmadan, ihtiyacınız olan dosyaları elle yüklemeniz gerekir, bu karmaşık bir süreçtir ve Çekirdeği çok iyi bilmiyorsanız başarısızlığa eğilimlidir. Javascript güvenliğinde ne kadar iyisiniz?

2) Nasıl admin-ajax.phpçalışır? O dosyadan fazla anlamıyorum. Kullanmaya hazır olmak için tüm işlevleri yüklüyor mu?

  1. WordPress Core'u yükler, yani $wpdb ve gibi şeyleri kullanabilirsiniz $WP_Query. Bu yaklaşık 25. satır üzerinden.
  2. Birkaç başlık gönderir - satır 37 - 41.
    1. Bir içerik türü başlığı
    2. Tarayıcılara sonuçları önbelleğe almamalarını söyleyen bir başlık
    3. İlginç başlıklar send_nosniff_headers()
    4. ve nocache_headers().
  3. admin_initKanca yangınlar.
  4. Temel eylemler dinamik olarak tanımlanır ve kaydedilir - satır 46 - 73. Bunlar gerekmedikçe kaydedilmez - yani, $_GETveya yoluyla istenmedikçe kaydedilmez $_POST.
  5. "Kalp atışı" API kanca yangınları - satır 75
  6. İstekte bulunan kullanıcının "oturum açıldı" durumu kontrol edilir ve uygun yönetici veya "ayrıcalık yok" çağrısı tetiklenir.

1 ve 6 numaralı maddeler, bence AJAX API'sini kullanmanın başlıca nedenleridir. Neredeyse kesinlikle ihtiyacınız olan WordPress Core'a sahipsiniz ve WordPress'in geri kalanıyla aynı giriş güvenlik sistemine sahipsiniz.


6

admin-ajax.phpWordPress AJAX API'sinin bir parçasıdır ve evet, hem arka uçtan hem de önden gelen istekleri işler. burada ne soru için anlamaya olduğunu:

2) admin-ajax.php nasıl çalışır?

mantık için burayı ziyaret edebilirsiniz.

Bu, JavaScript vb. Nasıl sıralayacağınızı zaten bildiğinizi varsayar.

JavaScript Parçası:

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 Parçası:

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'unuzu temalar / örnek / json.php gibi ayrı bir dosyada kodlamak yerine neden admin-ajax.php kullanıyorsunuz ve verilerinizi orada kodluyorsunuz?

bu yardımcı olabilir. admin-ajax.php - Ajax İstekleri için Özel Sayfa Şablonu


Hey, bu eylem kancalarını 'wp_ajax_example_ajax_request' ve 'wp_ajax_nopriv_example_ajax_request' açıklayabilir misiniz Hiçbir yerde hiçbir açıklama bulamıyorum. Ayrıca ajaxurl neyi çözüyor? Teşekkürler
David Okwii
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.