Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/06/2011, 20:02
Avatar de metacortex
metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 20 años, 6 meses
Puntos: 832
[Mini-tutorial] Introducción a los filtros de WordPress

Supongamos que escribimos esta función en WordPress:

Código PHP:
Ver original
  1. function pepe() {
  2.     return 'Pepe es gordo';
  3. }
  4.  
  5. echo pepe();

Naturalmente obtendremos "Pepe es gordo" hoy y en 1000 años. Si quisiéramos mostrar "Pepe es flaco" tendríamos que escribir otra función o aplicar un str_replace() a la existente; métodos viables con el presente ejemplo pero definitivamente engorrosos con funciones más complejas. Ahora abordemos esto al estilo WordPress:

Código PHP:
Ver original
  1. function pepe() {
  2.     return 'Pepe es '. apply_filters( 'contextura', 'gordo' );
  3. }
  4.  
  5. echo pepe();

Aquí hemos aplicado un hook tipo filtro. "Hook" significa "gancho", palabra que los define correctamente, pues literalmente son ganchos ubicados dentro de las funciones que nos permiten añadir trozos de código para alterar su comportamiento. Ahora nuestra función pepe() está lista para ser modificada sin tocarle un pelo. Veamos:

Código PHP:
Ver original
  1. function pepe() {
  2.     return 'Pepe es '. apply_filters( 'contextura', 'gordo' );
  3. }
  4.  
  5. function contex() {
  6.     return 'flaco';
  7. }
  8.  
  9. add_filter( 'contextura', 'contex');
  10.  
  11. echo pepe();

Ahora tenemos que "Pepe es flaco" mientras echo pepe() permanece inmutable. Esto es sencillamente genial, pues hablamos de la posibilidad de construir funciones modificables de forma externa.

Revisemos de nuevo lo que ha sucedido en el código anterior: apply_filters es el hook que nos dice "hey, pssst... puedes modificar esta parte", mientras add_filter es el hook que la modifica. Ambos se enganchan a través de un identificador único ('contextura') y se logra la sobrescritura.

Ahora bien ¿Qué pasaría si quisiéramos mostrar "Laura es flaca"?. Pues nada, construimos nuestros "ganchos" donde haga falta:

Código PHP:
Ver original
  1. function pepe() {
  2.     return apply_filters( 'nombre', 'Pepe' ) .' es '. apply_filters( 'contextura', 'gordo' );
  3. }
  4.  
  5. function otra_cosa() {
  6.     return 'Laura';
  7. }
  8.  
  9. function contex() {
  10.     return 'flaca';
  11. }
  12.  
  13. add_filter( 'nombre', 'otra_cosa');
  14. add_filter( 'contextura', 'contex');
  15.  
  16. echo pepe(); // "Laura es flaca"

El ejemplo es bastante básico pero nos ayuda a comprender esta parte de una vez por todas. La estructura de parámetros básica de apply_filters es:

Código PHP:
Ver original
  1. apply_filters('identificador' , 'elemento modificable');

y la de add_filter:

Código PHP:
Ver original
  1. add_filter( 'identificador', 'funcion modificadora' );

Notas:

1) Los hooks también aceptan parámetros extra. Igualmente es posible establecer la prioridad entre dos o más hooks de un mismo tipo. La configuración es la siguiente:

Código PHP:
Ver original
  1. add_filter('identificador' , 'funcion modificadora' , 'prioridad frente a otros hooks del mismo tipo', 'parámetros extra');

2) En el propio sistema de archivos de WordPress, muchas funciones vienen preparadas para ser modificadas mediante filtros. Puedes revisar la lista.

De interés:

- Referencia de filtros.
- apply_filters
- add_filter
- Using Filter Hooks in WordPress Child Themes (el mejor tutorial de inicio que he visto en la red hasta el momento).

Última edición por metacortex; 05/06/2011 a las 21:27 Razón: Corrección