Pregunta

He estado buscando en el plug-in API un poco más en profundidad recientemente y me preguntaba ¿Qué diferencias reales que había entre la acción y enlaces de filtros . Ambos son eventos que reciben datos como parámetro y parece que tanto ser capaz de hacer las mismas cosas.

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

Además de la semántica y para qué se utilizan, qué diferencias reales hay entre ellos?

¿Fue útil?

Solución

Hola @Sruly

que haya respondido más o menos a su propia pregunta, pero voy a elaborar un poco.

Acción Ganchos

Acciones Hooks están destinadas para su uso cuando WordPress núcleo o algún plugin o tema que está dando la oportunidad de ingresar el código en un momento determinado y hacer uno o más de los siguientes:

  1. Uso echo a inyectar algo de HTML o de otros contenidos en la memoria de respuesta,
  2. Modificar estado variable global para una o más variables, y / o
  3. modificar los parámetros pasado a su función de enlace (suponiendo que el gancho fue llamado por do_action_ref_array() en lugar de do_action() ya que este último no es compatible con las variables que pasan por referencia .)

Filtro Hooks

Filtro Hooks se comportan muy similar a Acción Ganchos pero su uso está destinado a recibir un valor y potencialmente devolver una versión modificada del valor. Un gancho de filtro también se podría utilizar como una acción Hook es decir, la modificación de una variable global o generar algo de HTML, asumiendo que eso es lo que hay que hacer cuando el gancho se llama. Una cosa que es muy importante acerca de filtro ganchos que usted no necesita preocuparse por la acción ganchos es que la persona que utiliza un gancho filtros debe de retorno (una versión modificada de ) el primer parámetro que fue aprobada. Un error común es novato que se olvide de volver ese valor!

Uso de parámetros adicionales para proporcionar el contexto en el filtro Hooks

En un aparte Filtro sentí que los ganchos se cojeó en versiones anteriores de WordPress, ya que recibirían sólo un parámetro; es decir que obtendrían un valor a modificar, pero no hay parámetros de 2ª o 3ª proporcionar cualquier contexto. Últimamente, sin embargo, y de manera positiva, parece que el equipo central de WordPress ha alegremente (para mí) han de añadir parámetros adicionales a Filtro Hooks para que pueda descubrir más contexto. Un ejemplo bueno es el gancho posts_where; Creo que algunas versiones atrás que sólo se acepta un parámetro de ser de la consulta actual "donde" SQL clase, pero ahora se acepta tanto la cláusula where y una referencia a la instancia actual de la clase WP_Query que se llama al gancho.

¿Cuál es la diferencia real?

En realidad Ganchos de filtro son más o menos un superconjunto de Acción de ganchos. El primero puede hacer nada este último puede hacer y un poco más aunque el desarrollador no tiene la responsabilidad de devolver un valor con el gancho de acción que él o ella lo hace con el filtro de gancho.

Dar Orientación y telegrafiar Intención

Pero eso es lo que probablemente no es importante. Creo que lo importante es que por un desarrollador de la elección de utilizar un gancho de acción frente a un gancho de filtro o viceversa son telegrafiar sus intenciones y por lo tanto dando orientación a la themer Plugin o desarrollador que pueda estar utilizando el gancho. En esencia que están diciendo o bien "Voy a llamar, hacer lo que tiene que hacer" o "I' ve que va a pasar que este valor a modificar, pero estar seguro de que pasar de nuevo ".

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!

Otros consejos

Si nos fijamos en la fuente para la función básica add_action(), es sólo un envoltorio 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 clave:. No devuelve un valor

Entonces, ¿qué quiere decir esto? acciones son como filtros, excepto una acción no devuelve un valor, por lo que no puede modificar los datos. Esto demuestra que era sencillo para crear el mecanismo de acción de WordPress simplemente copiando el mecanismo de filtro, y no devolver un valor. Básicamente, todo lo que puede hacer con una acción es simplemente ejecutar una función sin modificar algún valor.

En la simple palabra.

Acciones son aquellas funciones PHP que ejecutan la salida.

Filtros son aquellas funciones PHP que devuelven la salida.

Actualizado: Podemos extender ningún plugin que utilizan las acciones y filtros sin modificar existe código. Mediante la adición de filtros y acciones en nuestro propio tema o plugin.


¿Cómo utilizar?

Acción:

Compruebe a continuación ejemplos sencillos en su archivo de tema functions.php.

  1. Ejemplo uno: (PHP ejemplo simple)
function test() {
     echo "Output";
}

test();

Sobre el programa imprime la salida:

Output

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


  1. Ejemplo dos: (uso simple de Acción)
function test1() {
     echo "Output";
}
add_action( 'test', 'test1' );

do_action( 'test' );

Sobre el programa imprime la salida:

Output

[NOTA: aquí Obras do_action('test') como la función que llama. Y ejecutar la función de devolución de llamada 'test1'.]


  1. Ejemplo tres: (Otro uso de acciones)
function test2() {
     echo "Test 2";
}
add_action( 'test', 'test2', 1 );

function test1() {
     echo "Test 1";
}
add_action( 'test', 'test1', 2 );

do_action( 'test' );

Sobre el programa imprime la salida:

Test 2Test 1

[NOTA: aquí Obras do_action('test') como la función que llama. Y ejecutar las funciones de devolución de llamada en él de prioridades.

Devolución de llamada función 'test1' tiene prioridad 2 Y 'test2' tiene prioridad 1.]

Si las prioridades son el cambio como 'test1' con prioridad 1 Y 'test2' con prioridad 2 de salida será entonces:

Test 1Test 2

  1. Ejemplo cuatro: (apoyo tercera parte) Añadir a continuación el 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' );

Sobre el programa imprime la salida:

Test 1

Ahora, Crear plugin de muestra para comprobar cómo funciona para tercera parte desarrollador.

  1. Crear carpeta 'simple' en el directorio /wp-content/plugins/.
  2. Crear archivo llamado 'simple.php' y añadir a continuación código.
/*
* Plugin Name: Simple Plugin
*/
function test_callback_function() {
     echo "From plugin";
}
add_action( 'test', 'test_callback_function' );

Ahora, activar nuestra plugin simple de administración de WordPress salpicadero.

plugin de menú Goto y activarlo.

Después de activar el plugin anterior programa imprime la salida:

Test 1From plugin

[NOTA: Si le sumamos la prioridad de nuestra acción plug-in de 1 a 9 y luego se imprime la salida como:

From pluginTest 1

Debido a que, WordPress considerar la 10 priority by default para todas las acciones añadidas.]

Filtros

Comprobar el siguiente ejemplo:

PHP simple ejemplo:

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

Sobre el programa imprime la salida:

Array ( [0] => one [1] => two )
  1. Ejemplo uno: (simple uso de Filter)
$data = apply_filters( 'my_filter_name', array( 'one', 'two' ) );
print_r( $data );

add_filter( 'my_filter_name', function( $old_data ) {
     return array( 'three', 'four' );
});

Sobre el programa imprime la salida:

Array ( [0] => three [1] => four )

A continuación, hemos añadido my_filter_name filtro y cambiar el array( 'one', 'two' ) salida existente con array( 'three', 'four' ) sin cambiar el tema / plugin archivos.


Licenciado bajo: CC-BY-SA con atribución
scroll top