Feb 222015
 
Artículo WordPress

Una de las claves por las cuales wordpress se ha convertido en uno de los sistemas de gestión de contenidos (CMS) más populares es su flexibilidad para incorporar nuevas funcionalidades mediante plugins. El desarrollo de plugins para wordpress es posible gracias al mecanismo de “hooks” (ganchos). Los hooks son puntos distribuidos a lo largo de todo el código de wordpress, que permiten ejecutar determinados procesos mediante “acciones”, o modificar mediante “filtros” el código HTML generado para cada uno de los elementos que componen la página.

En este artículo se explican los detalles de implementación de los hooks, acciones y filtros de wordpress.

Funciones de generación de página de WordPress

Cada página que el servidor entrega en respuesta a una solicitud, consta de una serie de elementos. En la mayoría de los casos, podemos descomponer la página en la cabecera, el menú de navegación, el contenido principal, una barra lateral y un pie de página.

WordPress implementa una serie de funciones que extraen de la base de datos el contenido de cada uno de estos elementos, y lo ponen a disposición del tema utilizado. El tema llama a estas funciones para recuperar el contenido de la página y generar el código HTML que entrega al cliente.

Las principales funciones de este tipo son:

  • wp_head() – Genera el contenido de la sección <head> del documento
  • get_header() – Genera el código HTML de la cabecera de la página, cargando el correspondiente script “header.php” del tema activo.
  • the_content() – Genera el código HTML de la página
  • get_footer() – Carga el pie de página

Normalmente, el tema utilizado por el blog consta de una serie de scripts: “index.php”, “header.php”, “page.php”, “single.php”, “footer.php”, etc. Estos scripts contienen las llamadas a las funciones de wordpress para obtener el contenido de la página y entregárselo al cliente.

 Ganchos de tipo action y de tipo filter

Algunas de las funciones de generación de página contienen una llamada a una función do_action(“etiqueta-de-accion’). Además, muchas de ellas contienen una llamada a una función apply_filters(“etiqueta-de-filtro”)

función acción filtro
wp_head do_action(‘wp_head’)
get_header do_action(‘get_header’)
the_content apply_filters(‘the_content’)
get_footer do_action( ‘get_footer’)

El tema utilizado, y/o los plugins activos, pueden ampliar la funcionalidad del sitio, asociando funciones PHP a las etiquetas de acción o filtro, mediante llamadas a las funciones add_action() y add_filter(). Cuando se ejecuta do_action($etiqueta) o apply_filters($etiqueta), se ejecutan todas las funciones que hayan sido asociadas a dicha etiqueta.

Acciones y filtros son muy similares  (de hecho, la función add_action() está implementada como un alias de add_filter()). La diferencia está en que los filtros devuelven un valor, que es el resultado de modificar un argumento que han recibido.

Ejemplo de gancho de tipo action

Por ejemplo, para insertar un comentario HTML en la sección <head> de la página, se puede enganchar a la etiqueta ‘wp_head’ una función “mi_comentario”. Primero, escribimos la función:

A continuación, hacemos una llamada a add_action() con la etiqueta ‘wp_head’ para “enganchar” esta función en el gancho wp_head:

Tanto la definición de la función como la llamada a add_action() se incluyen normalmente en el script “functions.php” del tema utilizado.

De la misma manera, podríamos haber incluido en el header la carga de una librería javascript, o de una hoja de estilo CSS.

Ejemplo de gancho de tipo filter

Por otra parte, el tema, o algún plugin, pueden utilizar ganchos de tipo filtro para modificar el contenido de alguno de los elementos.

Por ejemplo, en la tabla de arriba hemos visto que la función “the_content()” llama a los filtros que hayan sido asociados a la etiqueta “the_content”. Podemos utilizar este gancho para sustituir la palabra “vivienda” por “casa” en el contenido de todos los artículos del blog. En primer lugar, escribimos la función “sustituye_casa()”, que realiza la sustitución sobre el argumento recibido, y devuelve el resultado:

A continuación, hacemos una llamada a add_filter para enganchar la función al filtro “the_content”:

Argumentos adicionales en las llamadas a add_action y add_filter

Ambas funciones admiten los mismos argumentos adicionales:

El argumento $prioridad es un valor numérico de 0 a 10 (su valor por defecto es 10). Este argumento establece el orden relativo de ejecución de las funciones asociadas a una misma etiqueta. Las funciones con valores más bajos de prioridad se ejecutan antes que las funciones con valores más altos.

El argumento $num_argumentos indica el número de argumentos que acepta la función $función.

Cómo listar todas las funciones asociadas a una etiqueta

La variable global $wp_filter contiene todas las functiones asociadas a acciones o filtros.

En el fichero functions.php del tema utilizado en el sitio, podemos añadir una función “list_hooked_functions”, que admite opcionalmente un argumento con el nombre del tag que nos interesa.

La función devuelve la relación de todas las funciones asociadas, en forma de un comentario HTML:

 

Referencias

 Publicado por en 12:21 pm

 Deja un comentario

(requerido)

(requerido)