it-swarm-es.com

¿Diferencia entre el filtro y los ganchos de acción?

Recientemente he estado analizando un poco más la API del plugin y me preguntaba qué diferencias reales había entre la acción y los ganchos de filtro . Ambos son eventos que reciben datos como un parámetro y parecen ser capaces de hacer las mismas cosas.

Obviamente veo que las acciones se llaman cuando las acciones tienen lugar y los filtros cuando los datos se manipulan, pero parece ser solo una diferencia de nombre semántica.

Además de la semántica y para qué se usan, ¿qué diferencias reales hay entre ellas?

49
Sruly

Hola @Sruly:

Usted ha respondido bastante a su propia pregunta, pero voy a elaborar un poco.

Ganchos de acción

Los Actions Hooks están diseñados para ser utilizados cuando el núcleo de WordPress o algún complemento o tema te da la oportunidad de insertar tu código en un momento determinado y hacer una o más de las siguientes acciones:

  1. Use echo para inyecte algo de HTML u otro contenido en el búfer de respuesta,
  2. Modificar el estado de la variable global para una o más variables, y/o
  3. Modificar los parámetros pasó a su función de enganche (asumiendo que el enganche fue llamado por do_action_ref_array() en lugar de do_action() ya que esta última no admite el paso de variables por referencia.)

Ganchos de filtro

Filter Hooks se comportan de manera muy similar a Action Hooks pero su uso previsto es recibir un valor y, potencialmente, devolver una versión modificada del valor. Un gancho de filtro también podría usarse como un gancho de acción, es decir, para modificar una variable global o generar algo de HTML, asumiendo que eso es lo que debe hacer cuando se llama el gancho. Una cosa que es muy importante sobre los ganchos de filtro de los que no tiene que preocuparse con los ganchos de acción es que la persona que usa un gancho de filtro debe devuelve (una versión modificada de) el primer parámetro fue pasado ¡Un error común de un novato es olvidar devolver ese valor!

Uso de parámetros adicionales para proporcionar contexto en los ganchos de filtro

Dejando a un lado sentí que Filter Hooks estaba trabado en versiones anteriores de WordPress porque solo recibirían un parámetro; es decir, obtendrían un valor para modificar, pero no 2 o 3 parámetros para proporcionar ningún contexto. Últimamente, y de manera positiva, sin embargo, parece que el equipo central de WordPress ha agregado (para mí) alegremente parámetros adicionales a los ganchos de filtro para que pueda descubrir más contexto. Un buen ejemplo es el gancho posts_where; Creo que algunas versiones anteriores solo aceptaban un parámetro, siendo la consulta actual "where" class SQL, pero ahora acepta tanto la cláusula where como una referencia a la instancia actual de la clase WP_Query que invoca a gancho.

Entonces, ¿cuál es la diferencia real?

En realidad, los ganchos de filtro son prácticamente un superconjunto de ganchos de acción. Lo primero puede hacer todo lo que puede hacer y un poco más, aunque el desarrollador no tiene la responsabilidad de devolver un valor con el Action Hook que él o ella hacen con Filter Hook.

Dando orientación e intención de telegrafiar

Pero eso probablemente no es lo importante. Creo que lo importante es que, al elegir un desarrollador que use un Action Hook en lugar de Filter Hook o viceversa, son telegrafiando su intención y, por tanto, dando orientación al remitente o complemento. Desarrollador que podría estar usando el gancho. En esencia, ellos también dicen "Te voy a llamar, haz lo que tengas que hacer" _ ​​O"Te voy a pasar esto valor para modificar, pero asegúrese de que lo devuelva ".

Así que, en última instancia, creo que la orientación proporcionada por la elección del tipo de gancho es el valor real detrás de la distinción. OMI, de todos modos.

¡Espero que esto ayude!

56
MikeSchinkel

Si observa la fuente de la función principal add_action(), es solo un contenedor para la función add_filter() ...

Y si nos fijamos en la función principal do_action(), es muy similar a la función principal apply_filters(), con una diferencia muy importante: no devuelve un valor.

Entonces, ¿qué significa esto? las acciones son como los filtros, excepto que una acción no devuelve un valor, por lo que no puede modificar los datos. Muestra que fue sencillo crear el mecanismo de acción de WordPress simplemente copiando el mecanismo de filtro y no devolviendo un valor. Básicamente, todo lo que puedes hacer con una acción es simplemente ejecutar una función sin modificar algún valor.

11
trusktr

En palabras simples.

Las acciones son aquellas funciones PHP que ejecutan la salida.

Los filtros son aquellas funciones PHP que devuelven la salida.

Actualizado: Podemos extender cualquier complemento que use las acciones y los filtros sin modificar el código. Añadiendo filtros y acciones en nuestro propio tema o plugin.


¿Cómo utilizar?

Acción:

Revise los ejemplos simples a continuación en su archivo functions.php de tema.

  1. Ejemplo uno: (Ejemplo simple PHP)
 prueba de función () {
 echo "Salida"; 
} 
 
 prueba (); 

El programa anterior imprime la salida:

Salida

[NOTA: Aquí prueba () simplemente llame a la función. Y ejecute la función de devolución de llamada 'prueba'.]


  1. Ejemplo Dos: (Uso simple de la acción)
 función prueba1 () {
 echo "Salida"; 
} 
 add_action ('prueba', 'prueba1'); 
 
 do_action ('prueba'); 

El programa anterior imprime la salida:

Salida

[NOTA: Aquí do_action('test') funciona como la función de llamada. Y ejecute la función de devolución de llamada 'test1'.]


  1. Ejemplo Tres: (Otro uso de Acciones)
 función test2 () {
 echo "Test 2"; 
} 
 add_action ('test', 'test2', 1); 
 
 función prueba1 () {
 echo "Prueba 1"; 
} 
 add_action ('prueba', 'prueba1', 2); 
 
 do_action ('prueba'); 

El programa anterior imprime la salida:

 Prueba 2Test 1 

[NOTA: Aquí do_action('test') funciona como la función de llamada. Y ejecutar funciones de devolución de llamada en sus prioridades.

La función de devolución de llamada 'test1' tiene prioridad 2 y 'test2' tiene prioridad 1.]

Si las prioridades cambian, como 'test1' con prioridad 1 y 'test2' con prioridad 2, la salida será:

 Prueba 1Test 2 

  1. Ejemplo cuatro: (soporte de terceros) Agregue el siguiente código en functions.php
 function test1 () {
 do_action ('test_before'); 
 echo "Test 1"; 
 do_action ('test_after'); 
 } 
 add_action ('test', 'test1'); 
 
 do_action ('test'); 

El programa anterior imprime la salida:

 Prueba 1 

Ahora, crea un complemento de ejemplo para comprobar cómo funciona para un desarrollador externo.

  1. Crear carpeta 'simple' en el directorio /wp-content/plugins/.
  2. Cree el archivo llamado 'simple.php' y agregue el siguiente código.
/* 
 * Nombre del complemento: Complemento simple 
 */[
 Function test_callback_function () {
 Echo "From plugin"; 
} 
 add_action ('test', 'test_callback_function'); 

Ahora, active nuestro complemento simple desde el panel de administración de WordPress.

Ir al menú de complementos y activarlo.

Después de activar el complemento del programa anterior, imprima la salida:

 Prueba 1 del complemento 

[NOTA: Si agregamos la prioridad para nuestra acción del complemento del 1 al 9, imprimimos la salida como:

 Del pluginTest 1 

Porque, WordPress considera el 10 priority by default para todas las acciones agregadas.]

Filtros

Revisa los siguientes ejemplos:

Simple PHP ejemplo:

 $ data = array ('one', 'two'); 
 print_r ($ data); 

El programa anterior imprime la salida:

 Matriz ([0] => uno [1] => dos) 
  1. Ejemplo uno: (uso simple del filtro)
 $ data = apply_filters ('my_filter_name', array ('one', 'two')); 
 print_r ($ data); 
 
 add_filter (' my_filter_name ', function ($ old_data) {
 return array (' three ',' four '); 
}); 

El programa anterior imprime la salida:

 Matriz ([0] => tres [1] => cuatro) 

Aquí, hemos añadido el filtro my_filter_name y cambiar la salida existente array( 'one', 'two' ) con array( 'three', 'four' ) sin cambiar los archivos de tema/complemento.


4
maheshwaghmare