Llamada AJAX desde el frontend

Php marzo 10, 2026

El sistema AJAX de WordPress permite comunicación asíncrona entre el navegador y el servidor sin recargar la página. Todas las peticiones pasan por admin-ajax.php, que actúa como punto de entrada único y gestiona la autenticación. Es imprescindible siempre verificar el nonce para evitar peticiones falsificadas (CSRF).

Casos de uso: formularios que envían datos sin recargar, filtros de contenido dinámicos, cargar más posts con un botón, votar o marcar favoritos.

<?php
// PHP: registrar la acción AJAX
add_action( 'wp_ajax_obtener_datos', 'ajax_obtener_datos' );
add_action( 'wp_ajax_nopriv_obtener_datos', 'ajax_obtener_datos' );
function ajax_obtener_datos() {
    check_ajax_referer( 'mi_nonce', 'nonce' );

    $id = intval( $_POST['id'] );
    $post = get_post( $id );

    if ( ! $post ) {
        wp_send_json_error( 'Post no encontrado' );
    }

    wp_send_json_success( array(
        'titulo'  => get_the_title( $post ),
        'excerpt' => get_the_excerpt( $post ),
    ) );
}

// JS: llamar desde el frontend
/*
jQuery.post(miPlugin.ajaxurl, {
    action: 'obtener_datos',
    nonce:  miPlugin.nonce,
    id:     123
}, function( response ) {
    if ( response.success ) {
        console.log( response.data.titulo );
    }
});
*/

¿Qué hace cada parte?

  • wp_ajax_{action}: hook para usuarios logueados. El sufijo debe coincidir exactamente con el valor de action que envía el JS.
  • wp_ajax_nopriv_{action}: mismo hook pero para visitantes no logueados. Si solo quieres AJAX para usuarios autenticados, omite esta línea.
  • check_ajax_referer(): valida el nonce. Si falla, detiene la ejecución y devuelve un error -1. Es la línea de seguridad más importante.
  • intval(): fuerza el parámetro a entero, evitando inyecciones SQL u otros ataques con el ID.
  • wp_send_json_error() / wp_send_json_success(): envían la respuesta JSON con el formato estándar de WordPress ({success: true, data: {...}}) y terminan la ejecución con wp_die().
  • response.success: en el JS, esta propiedad indica si el PHP devolvió éxito o error, permitiendo manejar ambos casos.