Aprovechar hooks y filters correctamente

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() o remove_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. Usa after_setup_theme o init según corresponda.
copy 2024 – Todos los derechos reservados.


Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *