Problemas ao entender apply_filters ()

19

Em apply_filters ()

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

Estou tendo problemas para colocar minha cabeça em volta do $valuee $var. Eu li o códice e parece que ele $valuepode ser modificado $var, mas não encontrei nenhum exemplo disso na natureza. Parece ser usado como uma maneira de passar uma variável. Nesse caso, qual é a diferença entre isso e o $var?

r00tAcc3ss
fonte

Respostas:

35

Tente ver a função com nomes melhores:

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
);

Então, quando essa função é chamada como:

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

Você pode usar …

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

… E obtenha duas variáveis ​​passadas para essa função. Você retorna o primeiro, o segundo fornece apenas mais contexto:

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

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

    return $classes;
}

As variáveis ​​adicionais existem para facilitar suas decisões, não para alterá-las também.

fuxia
fonte
Se eu entendi corretamente. Não adiciono uma variável para coletar o valor retornado de apply_filters, pois ele é aplicado automaticamente a $ value_to_change?
precisa saber é o seguinte
@ r00tAcc3ss Nada acontece automaticamente. Você precisa alterar o valor no seu retorno de chamada. Você também pode devolvê-lo inalterado, se desejar - dependendo do contexto.
fuxia
Oh sim. Eu quis dizer, não preciso aceitar o valor retornado em outra variável e atribuí-lo ao valor $. Isso é feito, se eu alterar o valor $ na função viciada e retornar "automaticamente".
precisa saber é o seguinte
11

O que são filtros?

Os filtros são funções pelas quais o WordPress passa os dados, em certos pontos da execução, pouco antes de executar alguma ação com os dados (como adicioná-los ao banco de dados ou enviá-los para a tela do navegador). Os filtros ficam entre o banco de dados e o navegador (quando o WordPress está gerando páginas) e entre o navegador e o banco de dados (quando o WordPress está adicionando novas postagens e comentários ao banco de dados); a maioria das entradas e saídas no WordPress passa por pelo menos um filtro. O WordPress faz alguma filtragem por padrão, e seu plugin pode adicionar sua própria filtragem.

Conectando-se a um filtro

Para permitir que os usuários alterem alguns dados específicos (um valor, a saída de uma função etc.), os ganchos de filtro são fornecidos por meio de apply_filtersfunções.
Esses ganchos de filtro incluem o nome (ou tag ) do filtro e pelo menos o nome da função a ser usada para filtrar (ou seja, alterar de alguma forma) os dados.

Para alterar o título de uma postagem, você pode usar o the_titlegancho de filtro, definido da seguinte maneira:

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

Isso significa que o filtro possui a tag / nome the_title, o primeiro parâmetro $titlesão os dados a serem alterados (ou seja, o título da postagem) e o segundo parâmetro $idé uma informação extra (nesse caso, o ID da postagem).

Para exibir o título de cada postagem em MAIÚSCULAS, por exemplo, você pode usar a seguinte linha:

add_filter('the_title', 'strtoupper');

Se dermos uma olhada na add_filterfunção, vemos que ela é definida da seguinte maneira:

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

Especificamos apenas o primeiro e o segundo parâmetro (obrigatório), enquanto o terceiro e o quarto parâmetros são configurados para seu respectivo valor padrão (ou seja, 10e 1).

Um filtro mais complexo

Se você quiser filtrar apenas uma determinada postagem , poderá usar as informações extras (no caso desse filtro: o ID). Para fazer isso, você deve especificar o número de parâmetros (que é 2 neste caso) e, para fazer isso novamente, é necessário especificar o parâmetro de prioridade (que vem antes do número de argumentos).

Suponha que desejemos afetar apenas o título da postagem com o ID 42, e será assim:

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

Nesse caso, temos que especificar todos os quatro parâmetros disponíveis.

Quais parâmetros eu tenho?

Para identificar o (número de) parâmetros disponíveis de um determinado filtro, é necessário procurar onde ele está definido (neste caso: aqui ).


Referências :

tfrommen
fonte
2
+1 para uma resposta completa e uma aula impecável (brochacho de formatação agradável)!
bosco
Obrigado, isso é muito completo, mas realmente não explica o que eu estava perguntando. por exemplo. a diferença entre a variável $ value e a variável $ var no filtro.
precisa saber é o seguinte
Hum, eu diria que sim, mas esse é, é claro, o meu sentimento subjetivo. Vou adicionar algumas informações sobre o filtro e seus parâmetros.
tfrommen