¿Por qué usar admin-ajax.php y cómo funciona?
Mi llamada ajax para datos json funciona bien de esta manera 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 () {
//obtener datos aquí
}
javascript:
var ajaxurl = 'http://'+window.location.host+'/wp-admin/admin-ajax.php';
jQuery.ajax({
type: 'POST',
url: ajaxurl,
etc.
Tengo 2 preguntas.
1) ¿Por qué usar admin-ajax.php en lugar de codificar tu json en un archivo separado como themes/example/json.php
y codificar tus datos allí?
2) ¿Cómo funciona admin-ajax.php? No entiendo mucho de ese archivo. ¿Carga todas las funciones para que estén listas para usar?
¡Gracias!

1) ¿Por qué usar
admin-ajax.php
en lugar de codificar tu json en un archivo separado comothemes/example/json.php
y codificar tus datos allí?
Usar admin-ajax.php
significa que el núcleo de WordPress está cargado y disponible. Sin eso, tendrías que cargar manualmente los archivos que necesitas, lo cual es un proceso complicado y propenso a fallos si no conoces muy, muy bien el núcleo. Además, ¿qué tan bueno eres con la seguridad en Javascript?
2) ¿Cómo funciona
admin-ajax.php
? No entiendo mucho de ese archivo. ¿Carga todas las funciones para que estén listas para usarse?
- Carga el núcleo de WordPress, lo que significa que puedes usar cosas como
$wpdb
y$WP_Query
. Esto ocurre hasta aproximadamente la línea 25. - Envía algunas cabeceras - líneas 37 - 41.
- Una cabecera de tipo de contenido
- Una cabecera para indicar a los navegadores que no almacenen en caché los resultados
- Las cabeceras interesantes son las enviadas por
send_nosniff_headers()
- y
nocache_headers()
.
- Se ejecuta el hook
admin_init
. - Las acciones principales se definen y registran dinámicamente - líneas 46 - 73. Estas no se registrarán a menos que sean necesarias, es decir, a menos que se soliciten mediante
$_GET
o$_POST
. - Se ejecuta el hook de la API "heartbeat" - línea 75
- Se verifica el estado de "logueado" del usuario que realiza la solicitud y se ejecuta el hook administrativo apropiado o el hook de "sin privilegios".
Los puntos #1 y #6 son las principales razones para usar la API AJAX, en mi opinión. Tienes el núcleo de WordPress, que casi seguramente necesitas, y tienes el mismo sistema de seguridad de inicio de sesión que en el resto de WordPress.

admin-ajax.php
es parte de la API AJAX de WordPress, y sí, maneja solicitudes tanto del backend como del frontend.
esto es lo que descubrí para tu pregunta que es:
2) ¿Cómo funciona admin-ajax.php?
para la lógica puedes visitar aquí.
Esto asume que ya sabes cómo encolar JavaScript, etc.
Parte de JavaScript:
jQuery(document).ready(function($) {
// Pasaremos esta variable a la función PHP example_ajax_request
var fruit = 'Banana';
// Esto hace la solicitud ajax
$.ajax({
url: ajaxurl,
data: {
'action':'example_ajax_request',
'fruit' : fruit
},
success:function(data) {
// Esto muestra el resultado de la solicitud ajax
console.log(data);
},
error: function(errorThrown){
console.log(errorThrown);
}
});
});
Parte de PHP:
function example_ajax_request() {
// $_REQUEST contiene todos los datos enviados via ajax
if ( isset($_REQUEST) ) {
$fruit = $_REQUEST['fruit'];
// Tomemos los datos que fueron enviados y hagamos algo con ellos
if ( $fruit == 'Banana' ) {
$fruit = 'Apple';
}
// Ahora lo retornaremos a la función javascript
// Cualquier salida será retornada en la respuesta
echo $fruit;
// Si estás depurando, puede ser útil ver lo que fue enviado en $_REQUEST
// print_r($_REQUEST);
}
// Siempre usa die() en funciones que emiten contenido ajax
die();
}
add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );
// Si también quisieras usar la función para usuarios no logueados (en un tema por ejemplo)
add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );
1) ¿Por qué usar admin-ajax.php en lugar de codificar tu json en un archivo separado como themes/example/json.php y codificar tus datos allí?
quizás esto sea útil.admin-ajax.php vs Plantilla de Página Personalizada para Solicitudes Ajax
