Problemas para comprender apply_filters ()

16

En apply_filters ()

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

Tengo problemas para envolver mi cabeza alrededor de $value y $var . Leí el códice y parece que el $value puede modificarse, $var no, pero no he encontrado ningún ejemplo de esto en la naturaleza. Parece ser usado como una forma de pasar una variable. En qué caso, ¿cuál es la diferencia entre eso y el $var ?

    
pregunta r00tAcc3ss 26.04.2013 - 16:40

2 respuestas

32

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 consigue que se pasen dos variables a esa función. Devuelve el primero, el segundo proporciona solo 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.

    
respondido por el fuxia 26.04.2013 - 16:54
10

¿Qué son los filtros?

  

Filtros son funciones por las que WordPress pasa los datos, en ciertos puntos de la ejecución, justo antes de tomar alguna acción con los datos (como agregarlos a la base de datos o enviarlos a la pantalla del navegador). Los filtros se ubican entre la base de datos y el navegador (cuando WordPress genera páginas) y entre el navegador y la base de datos (cuando WordPress agrega nuevas publicaciones y comentarios a la base de datos); la mayoría de las entradas y salidas en WordPress pasan a través de al menos un filtro. WordPress realiza algunos filtros de forma predeterminada, y su complemento puede agregar su propio filtro.

Enganchar en un filtro

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

Para modificar el título de una publicación, puede usar the_title filtro de gancho, 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 $title son los datos que se deben cambiar (es decir, el título de la publicación) y el segundo parámetro $id es información adicional (en En este caso el 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 función add_filter , 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 a su valor predeterminado respectivo (es decir, 10 y 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 volver a hacer esto, debe especificar el parámetro de prioridad (que viene antes del número de argumentos).

Supongamos que queremos afectar solo el título de la publicación con el 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 determinado filtro, debe buscar dónde está definido (en este caso: aquí ).

Referencias :

respondido por el tfrommen 26.04.2013 - 17:27

Lea otras preguntas en las etiquetas