Contents
Aprovechar hooks y filters correctamente en WordPress
Publicado el 15 de junio de 2024
Introducción
En el ecosistema de WordPress, los hooks y filters constituyen el núcleo de la extensibilidad del núcleo, temas y plugins.
Comprender su correcto funcionamiento, así como las buenas prácticas asociadas, permite crear soluciones más limpias, eficientes y seguras.
1. ¿Qué son hooks y filters
Los hooks son puntos de interacción donde WordPress lanza eventos (actions) o permite modificar datos (filters).
- Actions: Ejecutan funciones adicionales en momentos concretos.
- Filters: Reciben un valor, lo modifican y devuelven una versión alterada.
2. Anatomía básica
Elemento | Descripción |
---|---|
add_action() |
Registra una función para ejecutarse en un hook de acción. |
add_filter() |
Registra una función para modificar un valor en un filter hook. |
do_action() |
Dispara un hook de acción. |
apply_filters() |
Ejecuta todos los filtros registrados sobre un valor. |
3. Diferencias clave entre actions y filters
- Propósito: Actions para ejecutar código, filters para alterar datos.
- Retorno: Actions no retornan valor filters deben retornar siempre el dato procesado.
- Cadena de valor: Filters se encadenan, cada uno toma la salida del anterior.
4. Buenas prácticas (Best Practices)
-
Prefijos únicos: Evita colisiones de nombres usando prefijos de tu plugin o tema para los hooks y funciones.
Ejemplo:add_filter(mi_plugin_modificar_titulo, mi_plugin_modificar_titulo_fn)
-
Prioridad adecuada: Define prioridades para controlar el orden de ejecución. El valor por defecto es 10.
Sintaxis:add_filter(hook, func, 20)
- Documentación interna: Añade comentarios claros con @hook y @filter en tu docblock para IDEs y generadores de documentación.
-
Validación y saneamiento: Siempre que modifiques o devuelvas datos, aplica validaciones (
sanitize_text_field()
,esc_url()
, etc.). -
Elimina hooks innecesarios: Usa
remove_action()
oremove_filter()
para optimizar cuando sea posible.
5. Ejemplos prácticos
5.1. Modificar el título del post
function mi_plugin_modificar_titulo_fn(title) {
if (is_singular(post)) {
title = ★ . title
}
return esc_html(title)
}
add_filter(the_title, mi_plugin_modificar_titulo_fn, 15)
5.2. Añadir un metabox al admin
function mi_plugin_registrar_metabox() {
add_meta_box(
mi_plugin_meta,
Datos Adicionales,
mi_plugin_render_metabox,
post,
side,
default
)
}
add_action(add_meta_boxes, mi_plugin_registrar_metabox)
function mi_plugin_render_metabox(post) {
wp_nonce_field(mi_plugin_guardar_meta, mi_plugin_meta_nonce)
valor = get_post_meta(post->ID, _mi_plugin_meta_key, true)
echo ltinput type=text name=mi_plugin_meta value=.esc_attr(valor). style=width:100%gt
}
5.3. Ajustar la consulta de posts
function mi_plugin_ordenar_por_meta(query) {
if (!is_admin() query-gtis_main_query() is_home()) {
query-gtset(meta_key, mi_meta_fecha)
query-gtset(orderby, meta_value_num)
query-gtset(order, DESC)
}
}
add_action(pre_get_posts, mi_plugin_ordenar_por_meta)
6. Errores comunes y cómo evitarlos
-
No retornar en filters: Olvidar
return value
detiene la cadena de filtros y rompe la salida. -
Hooks demasiado genéricos: Usar
the_content
sin condicionales afecta a todos los contenidos, incluidas las llamadas de RSS o AJAX. -
Remover hooks sin verificar existencias: Llamar
remove_action()
antes de que el hook se registre no surte efecto. Usaafter_setup_theme
oinit
según corresponda.
7. Recursos y lecturas recomendadas
copy 2024 – Todos los derechos reservados.
|
Acepto donaciones de BAT's mediante el navegador Brave 🙂 |