Crear un admin AJAX personalizado y más ligero en WordPress
WordPress ofrece admin-ajax.php
para manejar solicitudes AJAX, pero puede ser demasiado pesado para ciertas aplicaciones, ya que carga todo el núcleo. Si deseas algo más ligero, puedes usar SHORTINIT
. A continuación, te mostramos cómo implementar un archivo personalizado llamado custom-admin-ajax.php
.
¿Qué es SHORTINIT?
SHORTINIT
es una constante en WordPress que limita la cantidad de funcionalidades cargadas. Cuando se define como true
, sólo se cargan los siguientes elementos:
- El archivo
wp-load.php
. - Funciones básicas de WordPress como
wpdb
,wp_safe_redirect
, ysanitize_text_field
. - La conexión a la base de datos y las utilidades esenciales para trabajar con datos.
Esto hace que las solicitudes sean mucho más rápidas, ya que evita cargar el sistema completo de WordPress, incluyendo los plugins y temas.
Crear el admin ajax personalizado
Crea un archivo llamado custom-admin-ajax.php
en el directorio wp-admin/
junto a admin-ajax.php
<?php define( 'SHORTINIT', true ); require_once __DIR__ . '/../wp-load.php'; // Verificar si se pasó una acción. if ( empty( $_REQUEST['action'] ) ) { wp_die( '0', 400 ); } $action = sanitize_text_field( $_REQUEST['action'] ); if ( has_action( "wp_custom_ajax_{$action}" ) ) { do_action( "wp_custom_ajax_{$action}" ); } // Si no se imprime nada, terminar con un mensaje por defecto. wp_die( '0' );
Configuración en el tema activo
En el archivo functions.php
del tema activo, registraremos el script JavaScript, el evento AJAX y un shortcode para mostrar el botón HTML.
Registrar el script y el evento AJAX.
<?php function enqueueCustomAjaxScript() { wp_enqueue_script( 'custom-ajax-script', get_template_directory_uri() . '/custom-ajax.js', [], '1.0', true ); wp_localize_script( 'custom-ajax-script', 'customAjax', [ 'url' => admin_url( 'custom-admin-ajax.php' ), ] ); } add_action( 'wp_enqueue_scripts', 'enqueueCustomAjaxScript' );
Manejar la acción en PHP
Define la acción personalizada para procesar la solicitud AJAX y devolver la hora local y UTC.
<?php function handleShowTime() { $localTime = current_time( 'H:i:s' ); $utcTime = gmdate( 'H:i:s' ); wp_send_json_success( [ 'local_time' => $localTime, 'utc_time' => $utcTime, ] ); } add_action( 'wp_custom_ajax_show_time', 'handleShowTime' );
Shortcode para mostrar el botón.
<?php function renderAjaxButton() { return '<button id="show-time-btn">Mostrar Hora</button><div id="time-output"></div>'; } add_shortcode( 'show_time_button', 'renderAjaxButton' );
Crear el script JavaScript
Crea un archivo llamado custom-ajax.js
en el directorio de tu tema con el siguiente contenido:
document.addEventListener('DOMContentLoaded', function() { const button = document.getElementById('show-time-btn'); const output = document.getElementById('time-output'); button.addEventListener('click', function() { fetch(customAjax.url + '?action=show_time') .then(function(response) { return response.json(); }) .then(function(data) { if (data.success) { output.innerHTML = '<p>Hora Local: ' + data.data.local_time + '</p>' + '<p>Hora UTC: ' + data.data.utc_time + '</p>'; } else { output.innerHTML = '<p>Error: ' + data.data.message + '</p>'; } }) .catch(function(error) { output.innerHTML = '<p>Error de conexión: ' + error.message + '</p>'; }); }); });
Resultado
- Agrega el shortcode
[show_time_button]
en cualquier entrada o página. - Al cargar la página, verás un botón que dice «Mostrar Hora».
- Al hacer clic, se imprimirá la hora local y UTC usando nuestro admin AJAX personalizado.
Con esta configuración, puedes manejar solicitudes AJAX de manera más eficiente y ligera en WordPress. Este enfoque es útil para aplicaciones donde el rendimiento es clave y solo se necesitan las funcionalidades básicas del núcleo.