Contents
Introducción
En WordPress, el sistema de acciones y filtros (hooks) es la columna vertebral que permite modificar el comportamiento y el contenido sin alterar el núcleo. Comprender cómo usar actions y filters es imprescindible para desarrollar temas y plugins robustos y mantenibles. Este artículo explica en detalle cómo funcionan, las diferencias entre ambos, ejemplos prácticos en PHP y buenas prácticas para evitar errores comunes.
Conceptos clave
- Action: Punto en el flujo de ejecución donde WordPress ejecuta funciones (efectos secundarios). No esperan un valor de retorno. Se usan para encolar scripts, modificar cabeceras, ejecutar código al guardar entradas, etc.
- Filter: Permite modificar un valor (por ejemplo, el contenido de una entrada) y debe devolver ese valor (modificado o no). Las funciones registradas con add_filter reciben un valor, lo procesan y retornan el resultado.
- Prioridad: Un número que determina el orden de ejecución entre varias funciones enganchadas al mismo hook (menor número = se ejecuta antes).
- Argumentos aceptados: Al registrar una función puedes indicar cuántos parámetros esperas, con el cuarto parámetro de add_action/add_filter.
Registro y llamada
Las llamadas principales son:
- add_action(hook, callable, priority = 10, accepted_args = 1)
- do_action(hook, …args)
- add_filter(hook, callable, priority = 10, accepted_args = 1)
- apply_filters(hook, value, …args)
Ejemplo básico: action simple
Enganchar una acción que se ejecute en init para registrar CPTs, taxonomías o inicializar lógica:
Productos, public => true, )) } add_action(init, mi_inicializador, 10) ?>
Ejemplo básico: filter que modifica contenido
Modificar el contenido de entradas usando el filtro the_content. IMPORTANTE: siempre devolver el valor.
Contenido adicional al final del post content .= insert } return content } add_filter(the_content, mi_filtro_contenido, 20) ?>
Prioridad y orden de ejecución
La prioridad por defecto es 10. Si necesitas que tu función se ejecute antes o después de otras, ajusta ese número. Ejemplo con dos funciones:
} function despues() { echo } add_action(wp_footer, despues, 20) add_action(wp_footer, antes, 5) // El resultado en el footer: primero luego ?>
Argumentos (accepted_args)
Algunos hooks pasan varios parámetros. Para recibirlos, debes indicar cuántos aceptas en add_action/add_filter.
Removing hooks: eliminar acciones y filtros
Para eliminar una acción o filtro usa remove_action/remove_filter. Debes pasar exactamente el mismo callable y prioridad con la que fue registrado.
En el caso de métodos de objetos (clases), eliminar requiere la misma instancia del objeto:
Ejemplos avanzados y casos prácticos
1) Encolar scripts y estilos correctamente
Usa wp_enqueue_scripts para front-end y admin_enqueue_scripts para admin.
2) Shortcode que usa filtros internos
Un shortcode puede aplicar filtros para permitir que otros lo modifiquen:
Hola mundo