Problemas para entender apply_filters ()

19

En apply_filters ()

apply_filters( $tag, $value, $var ... );

Tengo problemas para poner la cabeza alrededor del $valuey $var. Leí el códice y parece que $valuese puede modificar, $varno, pero no he encontrado ningún ejemplo de esto en la naturaleza. Parece ser utilizado como una forma de pasar una variable. En cuyo caso, ¿cuál es la diferencia entre eso y el $var?

r00tAcc3ss
fuente

Respuestas:

35

Intenta ver la función con mejores nombres:

apply_filters(
    $filter_name,     // used for add_filter( $filter_name, 'callback' );
    $value_to_change, // the only variable whose value you can change
    $context_1,       // context
    $context_2        // more context
);

Entonces, cuando esa función se llama como:

// wp-login.php line 94
apply_filters( 'login_body_class', $classes, $action );

Puedes usar …

add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );

... y obtener dos variables pasadas a esa función. Devuelve el primero, el segundo proporciona más contexto:

function function_to_change_login_body_class( $classes, $action )
{
    if ( 'login' === $action )
        $classes[] = 'foo';

    if ( 'postpass' === $action )
        $classes[] = 'bar';

    return $classes;
}

Las variables adicionales están ahí para facilitar sus decisiones, no para cambiarlas también.

fuxia
fuente
Si entiendo correctamente. ¿No agrego una variable para recopilar el valor devuelto de apply_filters ya que se aplica a $ value_to_change automáticamente?
r00tAcc3ss
@ r00tAcc3ss No ocurre nada automáticamente. Tiene que cambiar el valor en su devolución de llamada. También puede devolverlo sin cambios si lo desea, según el contexto.
fuxia
Oh si. Es decir, no tengo que aceptar el valor devuelto en otra variable y asignarlo a $ value. Eso está hecho, si cambio el valor de $ en la función enganchada y devuelto, "automáticamente".
r00tAcc3ss
11

¿Qué son los filtros?

Los filtros son funciones por las que WordPress pasa los datos, en ciertos puntos de la ejecución, justo antes de realizar alguna acción con los datos (como agregarlos a la base de datos o enviarlos a la pantalla del navegador). Los filtros se encuentran entre la base de datos y el navegador (cuando WordPress está generando páginas), y entre el navegador y la base de datos (cuando WordPress está agregando nuevas publicaciones y comentarios a la base de datos); La mayoría de las entradas y salidas en WordPress pasan por al menos un filtro. WordPress filtra un poco de forma predeterminada, y su complemento puede agregar su propio filtrado.

Engancharse a un filtro

Para permitir a los usuarios cambiar algunos datos específicos (un valor, la salida de una función, etc.), se proporcionan ganchos de filtro a través de apply_filtersfunciones.
Estos ganchos de filtro incluyen el nombre (o etiqueta ) del filtro y al menos el nombre de la función que se utilizará para filtrar (es decir, alterar de alguna manera) los datos.

Para alterar el título de una publicación, puede usar el the_titleenlace de filtro, que se define de la siguiente manera:

apply_filters( 'the_title', $title, $id );

Esto significa que el filtro tiene la etiqueta / nombre the_title, el primer parámetro $titleson los datos que se van a cambiar (es decir, el título de la publicación) y el segundo parámetro $ides información adicional (en este caso, la ID de la publicación).

Para mostrar el título de cada publicación en MAYÚSCULAS, por ejemplo, puede usar la siguiente línea:

add_filter('the_title', 'strtoupper');

Si echamos un vistazo a la add_filterfunción, vemos que se define de la siguiente manera:

add_filter( $tag, $function_to_add, $priority, $accepted_args );

Solo especificamos el primer y segundo parámetro (requerido), mientras que el tercer y cuarto parámetro se configuran con su respectivo valor predeterminado (es decir, 10y 1).

Un filtro más complejo

Si desea filtrar solo una determinada publicación , puede utilizar la información adicional (en el caso de este filtro: la ID). Para hacerlo, debe especificar el número de parámetros (que es 2 en este caso), y para hacerlo nuevamente, debe especificar el parámetro de prioridad (que precede al número de argumentos).

Supongamos que queremos afectar solo el título de la publicación con la ID 42, entonces se ve así:

add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
    if (42 === $id) return strtoupper($title);
    return $title;
} // function my_strtoupper

En este caso, tenemos que especificar los cuatro parámetros disponibles.

¿Qué parámetros tengo?

Para identificar el (número de) parámetros disponibles de un filtro determinado, debe buscar dónde está definido (en este caso: aquí ).


referencias :

tfrommen
fuente
2
¡+1 para una respuesta completa y una clase impecable (buen formato de brochacho)!
bosco
Gracias, eso es muy completo, pero realmente no explica lo que estaba preguntando. p.ej. La diferencia entre la variable $ value y la variable $ var en el filtro.
r00tAcc3ss
Hm, diría que sí, pero ese es, por supuesto, mi sentimiento subjetivo. Sin embargo, agregaré información sobre el filtro y sus parámetros.
tfrommen