Perché usare admin-ajax.php e come funziona?


9

La mia chiamata ajax per i dati json funziona bene in questo modo.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.

Ho 2 domande.

1) Perché usare admin-ajax.php invece di codificare il tuo json in un file separato come themes/example/json.phpe codificare i tuoi dati lì?

2) Come funziona admin-ajax.php? Non capisco molto da quel file. Carica tutte le funzioni così sei pronto per usarle?

Grazie!


2
Da notare che qualsiasi risposta potrebbe dire perché themes/example/json.phpdovrebbe essere considerata una delle maggiori vulnerabilità di sicurezza
Tom J Nowell

Risposte:


14

1) Perché usare admin-ajax.phpinvece di codificare il tuo json in un file separato come themes/example/json.phpe codificare i tuoi dati lì?

L'uso admin-ajax.phpindica che WordPress Core è caricato e disponibile. Senza di ciò, dovresti caricare a mano i file di cui hai bisogno, il che è un processo complicato e soggetto a guasti se non conosci molto bene il Core. E quanto sei bravo con la sicurezza Javascript?

2) Come admin-ajax.phpfunziona? Non capisco molto da quel file. Carica tutte le funzioni così sei pronto per usarle?

  1. Carica il core di WordPress, il che significa che puoi usare cose come $wpdb e $WP_Query. Questo è attraverso circa la linea 25.
  2. Invia alcune intestazioni - linee 37 - 41.
    1. Un'intestazione del tipo di contenuto
    2. Un'intestazione per indicare ai browser di non memorizzare nella cache i risultati
    3. Le intestazioni interessanti sono quelle inviate da send_nosniff_headers()
    4. e nocache_headers().
  3. L' admin_initamo si accende.
  4. Le azioni principali sono definite e registrate dinamicamente - righe 46 - 73. Queste non saranno registrate a meno che non siano necessarie-- cioè, a meno che non vengano richieste tramite $_GETo $_POST.
  5. Il gancio API "heartbeat" si attiva - linea 75
  6. Lo stato di "accesso" dell'utente richiedente viene verificato e viene attivato l'hook amministrativo o "nessun privilegio" appropriato.

A mio parere, gli articoli n. 1 e n. 6 sono i motivi principali per utilizzare l'API AJAX. Hai WordPress Core, di cui hai quasi sicuramente bisogno, e hai lo stesso sistema di sicurezza di accesso come con il resto di WordPress.


6

admin-ajax.phpfa parte dell'API AJAX di WordPress e, sì, gestisce le richieste sia dal backend che dal fronte. ecco cosa ho capito per la tua domanda che è:

2) Come funziona admin-ajax.php?

per la logica che puoi visitare qui.

Ciò presuppone che tu sappia già come accodare JavaScript, ecc.

JavaScript Piece:

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);
        }
    });   

});

Pezzo PHP:

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) Perché usare admin-ajax.php invece di codificare il tuo json in un file separato come temi / esempio / json.php e codificare i tuoi dati lì?

può essere utile. admin-ajax.php vs Modello di pagina personalizzato per richieste Ajax


Ehi, puoi spiegare questi ganci di azione 'wp_ajax_example_ajax_request' e 'wp_ajax_nopriv_example_ajax_request' Non trovo alcuna spiegazione da nessuna parte. Inoltre, a cosa risolve Ajaxurl? Grazie
David Okwii il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.