Perché usare admin-ajax.php e come funziona?
La mia chiamata ajax per i dati json funziona correttamente in questo modo 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 () {
//ottieni i dati qui
}
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 json in un file separato come themes/example/json.php
e codificare i dati lì?
2) Come funziona admin-ajax.php? Non capisco molto da quel file. Carica tutte le funzioni in modo che siano pronte all'uso?
Grazie!

1) Perché usare
admin-ajax.php
invece di codificare il tuo json in un file separato comethemes/example/json.php
e codificare i dati lì?
Usare admin-ajax.php
significa che il Core di WordPress è caricato e disponibile. Senza di esso, dovresti caricare manualmente i file necessari, un processo complicato e soggetto a errori se non conosci il Core in modo approfondito. Inoltre, quanto sei esperto in sicurezza Javascript?
2) Come funziona
admin-ajax.php
? Non capisco molto da quel file. Carica tutte le funzioni così sono pronte per l'uso?
- Carica il Core di WordPress, il che significa che puoi usare elementi come
$wpdb
e$WP_Query
. Questo avviene fino circa alla riga 25. - Invia alcuni header - righe 37 - 41.
- Un header per il tipo di contenuto
- Un header per dire ai browser di non memorizzare nella cache i risultati
- Gli header interessanti sono quelli inviati da
send_nosniff_headers()
- e
nocache_headers()
.
- Viene attivato l'hook
admin_init
. - Le azioni principali sono definite e registrate dinamicamente - righe 46 - 73. Queste non verranno registrate a meno che non siano necessarie - cioè, a meno che non siano richieste via
$_GET
o$_POST
. - Viene attivato l'hook dell'API "heartbeat" - riga 75
- Viene verificato lo stato di "accesso" dell'utente che fa la richiesta e viene attivato l'hook amministrativo appropriato o quello "senza privilegi".
I punti #1 e #6 sono le ragioni principali per usare l'API AJAX, secondo me. Hai il Core di WordPress, di cui quasi certamente hai bisogno, e hai lo stesso sistema di sicurezza per l'accesso come nel resto di WordPress.

admin-ajax.php
fa parte della API AJAX di WordPress e gestisce le richieste sia dal backend che dal frontend.
Ecco cosa ho capito per la tua domanda:
2) Come funziona admin-ajax.php?
Per la logica puoi visitare questo link.
Si presuppone che tu sappia già come accodare JavaScript, ecc.
Parte JavaScript:
jQuery(document).ready(function($) {
// Passeremo questa variabile alla funzione PHP example_ajax_request
var fruit = 'Banana';
// Questa è la richiesta ajax
$.ajax({
url: ajaxurl,
data: {
'action':'example_ajax_request',
'fruit' : fruit
},
success:function(data) {
// Questo mostra il risultato della richiesta ajax
console.log(data);
},
error: function(errorThrown){
console.log(errorThrown);
}
});
});
Parte PHP:
function example_ajax_request() {
// $_REQUEST contiene tutti i dati inviati via ajax
if ( isset($_REQUEST) ) {
$fruit = $_REQUEST['fruit'];
// Prendiamo i dati inviati e facciamo qualcosa
if ( $fruit == 'Banana' ) {
$fruit = 'Apple';
}
// Restituiamo il risultato alla funzione javascript
// Qualsiasi output sarà restituito nella risposta
echo $fruit;
// Se stai facendo debug, può essere utile vedere cosa è stato inviato in $_REQUEST
// print_r($_REQUEST);
}
// È sempre necessario usare die() nelle funzioni che restituiscono contenuti ajax
die();
}
add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );
// Se vuoi usare la funzione anche per utenti non loggati (ad esempio in un tema)
add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );
1) Perché usare admin-ajax.php invece di codificare il json in un file separato come themes/example/json.php e codificare i dati lì?
Forse questo può esserti utile: admin-ajax.php vs Template di Pagina Personalizzata per Richieste Ajax
