De ce să folosești admin-ajax.php și cum funcționează?
Apelul meu ajax pentru date json funcționează ok astfel 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 () {
//obține datele aici
}
javascript:
var ajaxurl = 'http://'+window.location.host+'/wp-admin/admin-ajax.php';
jQuery.ajax({
type: 'POST',
url: ajaxurl,
etc.
Am 2 întrebări.
1) De ce să folosești admin-ajax.php în loc să codifici json-ul într-un fișier separat precum themes/example/json.php
și să codifici datele acolo?
2) Cum funcționează admin-ajax.php? Nu înțeleg prea multe din acel fișier. Încarcă toate funcțiile astfel încât să fii pregătit să le folosești?
Mulțumesc!

1) De ce să folosești
admin-ajax.php
în loc să codezi json-ul într-un fișier separat precumthemes/example/json.php
și să codezi datele acolo?
Folosirea admin-ajax.php
înseamnă că WordPress Core este încărcat și disponibil. Fără aceasta, ar trebui să încarci manual fișierele de care ai nevoie, ceea ce este un proces complicat și predispus la erori dacă nu cunoști foarte, foarte bine Nucleul WordPress. Și, cât de bun ești la securitatea în Javascript?
2) Cum funcționează
admin-ajax.php
? Nu înțeleg prea multe din acel fișier. Încarcă toate funcțiile astfel încât să fii pregătit să le folosești?
- Încarcă WordPress Core, ceea ce înseamnă că poți folosi lucruri precum
$wpdb
și$WP_Query
. Asta se întâmplă până la linia 25 aproximativ. - Trimite câteva anteturi - liniile 37 - 41.
- Un antet pentru tipul de conținut
- Un antet care spune browserelor să nu cacheze rezultatele
- Anteturile interesante sunt cele trimise de
send_nosniff_headers()
- și
nocache_headers()
.
- Hook-ul
admin_init
este declanșat. - Acțiunile de bază sunt definite și înregistrate dinamic - liniile 46 - 73.
Acestea nu vor fi înregistrate decât dacă sunt necesare - adică dacă
sunt solicitate prin
$_GET
sau$_POST
. - Hook-ul API-ului "heartbeat" este declanșat - linia 75
- Este verificat statutul de "autentificat" al utilizatorului care face cererea și este declanșat hook-ul administrativ corespunzător sau cel "fără privilegii".
Punctele #1 și #6 sunt motivele principale pentru a folosi API-ul AJAX, în opinia mea. Ai la dispoziție WordPress Core, de care ai nevoie aproape sigur, și ai același sistem de securitate la autentificare ca în restul WordPress.

admin-ajax.php
face parte din API-ul AJAX al WordPress și da, se ocupă de cereri atât din backend cât și din frontend.
iată ce am descoperit pentru întrebarea ta care este:
2) Cum funcționează admin-ajax.php?
pentru logică poți vizita aici.
Aceasta presupune că știi deja cum să încarci JavaScript, etc.
Partea de JavaScript:
jQuery(document).ready(function($) {
// Vom trimite această variabilă către funcția PHP example_ajax_request
var fruit = 'Banana';
// Aceasta face cererea ajax
$.ajax({
url: ajaxurl,
data: {
'action':'example_ajax_request',
'fruit' : fruit
},
success:function(data) {
// Aceasta afișează rezultatul cererii ajax
console.log(data);
},
error: function(errorThrown){
console.log(errorThrown);
}
});
});
Partea de PHP:
function example_ajax_request() {
// $_REQUEST conține toate datele trimise via ajax
if ( isset($_REQUEST) ) {
$fruit = $_REQUEST['fruit'];
// Să luăm datele care au fost trimise și să facem ceva cu ele
if ( $fruit == 'Banana' ) {
$fruit = 'Apple';
}
// Acum le vom returna funcției javascript
// Orice este afișat va fi returnat în răspuns
echo $fruit;
// Dacă faci debugging, poate fi util să vezi ce a fost trimis în $_REQUEST
// print_r($_REQUEST);
}
// Întotdeauna folosește die() în funcțiile care returnează conținut ajax
die();
}
add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );
// Dacă dorești să folosești funcția și pentru utilizatorii nelogati (de exemplu într-o temă)
add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );
1) De ce să folosești admin-ajax.php în loc să codezi json-ul într-un fișier separat precum themes/example/json.php și să codezi datele acolo?
poate fi util acest lucru.admin-ajax.php vs Șablon de Pagină Personalizat pentru Cereri Ajax
