1.- Hooks Principales del Core de WordPress
| Hook | Tipo | Momento de EjecuciΓ³n (Ciclo de Vida) | Uso Principal / Caso PrΓ‘ctico | ParΓ‘metros Clave |
plugins_loaded | Action | Inmediatamente despuΓ©s de cargar todos los plugins activos. | Inicializar plugins, comprobar dependencias entre plugins, cargar textdomains (traducciones). | N/A |
after_setup_theme | Action | Inmediatamente despuΓ©s de cargar el functions.php del tema activo. | Registrar soporte del tema (add_theme_support), definir menΓΊs nativos (register_nav_menus). | N/A |
init | Action | Tras cargar el entorno de WP y antes de procesar cabeceras HTTP o consultas. | Registrar Custom Post Types, TaxonomΓas, Rewrite Rules, inicializar sesiones PHP. | N/A |
admin_init | Action | Solo en wp-admin / AJAX. Tras la inicializaciΓ³n del panel de administraciΓ³n. | Registrar ajustes con la Settings API (register_setting), procesar guardados de formularios admin. | N/A |
admin_menu | Action | Al construir la estructura de menΓΊs del panel de administraciΓ³n. | Crear pΓ‘ginas de opciones y submenΓΊs en el admin (add_menu_page, add_submenu_page). | N/A |
wp_loaded | Action | Tras la carga total de WordPress y la sesiΓ³n del usuario actual. | Procesar formularios en el frontend (envΓos POST), redirecciones previas a renderizado. | N/A |
parse_request | Action | Tras parsear la URL recibida segΓΊn las reglas de reescritura. | Inspeccionar o modificar las variables de consulta ($wp->query_vars) antes de consultar la BD. | \WP $wp |
query_vars | Filter | Durante el filtrado de variables pΓΊblicas en $wp->parse_request(). | AΓ±adir variables de URL personalizadas a la lista blanca de WordPress. | array $public_query_vars |
pre_get_posts | Action | Justo antes de ejecutar la consulta SQL principal de $wp_query. | Alterar la consulta de la base de datos (ej: cambiar posts_per_page, filtrar CPTs en bΓΊsquedas). | \WP_Query $query |
template_redirect | Action | Tras resolver la consulta $wp_query y definir quΓ© pΓ‘gina se estΓ‘ cargando. | Redirecciones HTTP (301/302), comprobaciΓ³n de muros de pago, cortar la ejecuciΓ³n (exit) para vistas custom. | N/A |
template_include | Filter | En template-loader.php, justo antes de incluir el archivo .php del tema. | Sobrescribir el archivo de plantilla a renderizar (como vimos en nuestro Template_Enforcer). | string $template (Ruta absoluta) |
wp_enqueue_scripts | Action | Antes de procesar la cabecera HTML en peticiones frontend. | Encolar hojas de estilo CSS (wp_enqueue_style) y scripts JS (wp_enqueue_script). | N/A |
admin_enqueue_scripts | Action | Antes de renderizar la interfaz de administraciΓ³n (wp-admin). | Encolar scripts o estilos exclusivos para el panel de administraciΓ³n. | string $hook_suffix |
wp_head | Action | Dentro de la etiqueta <head> del HTML. | Imprimir favicons, meta tags, pixels de analΓtica o scripts inline globales. | N/A |
body_class | Filter | Al invocar la funciΓ³n body_class() en la etiqueta <body>. | AΓ±adir o quitar clases CSS al elemento <body> segΓΊn el contexto de la pΓ‘gina. | array $classes, array $class |
the_content | Filter | Al invocar la funciΓ³n the_content() para mostrar el cuerpo de un post/pΓ‘gina. | Modificar el HTML del contenido (inyectar banners, filtrar palabras, transformar shortcodes). | string $content |
wp_footer | Action | Justo antes de la etiqueta de cierre </body>. | Imprimir scripts JS en el pie, modales Bootstrap, badges de depuraciΓ³n (como nuestro Laboratorio). | N/A |
save_post | Action | Al guardar, actualizar o crear una entrada en la base de datos. | Guardar campos personalizados (meta keys), actualizar cachΓ©s, enviar notificaciones por mail. | int $post_id, \WP_Post $post, bool $update |
wp_insert_post_data | Filter | Justo antes de que los datos de un post sean insertados o actualizados en la BD. | Sanitizar, modificar o validar tΓtulos, slug o estado del post antes de ejecutar el SQL. | array $data, array $postarr |
β±οΈ El Ciclo de Vida Resumido en 4 Fases Clave
Plaintext
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β 1. FASE DE CARGA Y BOOTSTRAP β β plugins_loaded ββ> after_setup_theme ββ> init β βββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ β βββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββ β 2. FASE DE ENRUTAMIENTO Y CONSULTA β β parse_request ββ> pre_get_posts ββ> wp β βββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ β βββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββ β 3. FASE DE SELECCIΓN Y RENDERIZADO β β template_redirect ββ> template_include ββ> wp_head β βββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ β βββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββ β 4. FASE DE SALIDA Y CIERRE β β the_content ββ> wp_footer ββ> shutdown β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ |
π‘ Reglas de Oro para Trabajar con Hooks
Usa
pre_get_postsen lugar dequery_posts()o segundas consultas:Modificar la consulta principal con
pre_get_postsevita hacer dos peticiones SQL consecutivas a la base de datos. AsegΓΊrate siempre de validar$query->is_main_query()para no alterar widgets o subconsultas secundarias.Acciones no retornan valor, los Filtros SΓ:
En
add_action, la funciΓ³n realiza una operaciΓ³n (ej: enviar un email, encolar un script). Enadd_filter, la funciΓ³n debe retornar obligatoriamente el valor recibido, modificado o no, o romperΓ‘s la cadena de datos de WordPress:1234// CORRECTOadd_filter('the_content', function(string $content): string {return $content . '<p>Texto inyectado al final</p>';});3.- Gana la batalla de prioridades cuando sea necesario:
Si necesitas que tu cΓ³digo se ejecute despuΓ©s de cualquier plugin comercial o maquetador, usa prioridades altas (
999o mayores). Si necesitas adelantarte a todos, usa prioridades bajas (1a5).
