Problema com o entendimento de apply_filters ()

16

Em apply_filters ()

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

Estou tendo problemas para envolver minha cabeça em torno de $value e $var . Eu li o códice e parece que o $value pode ser modificado, $var não, mas eu 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 ?

    
por r00tAcc3ss 26.04.2013 / 16:40
fonte

2 respostas

32

Tente ver a função com melhores nomes:

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 estão lá para facilitar suas decisões, e não para alterá-las também.

    
por fuxia 26.04.2013 / 16:54
fonte
10

O que são filtros?

  

Filtros são funções que o WordPress transmite os dados, em determinados pontos da execução, antes de realizar 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 novos posts e comentários ao banco de dados); a maior parte da entrada e saída 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 em 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 das funções apply_filters .
Esses ganchos de filtro incluem o nome (ou tag ) do filtro e pelo menos o nome da função que deve ser usado para filtrar (isto é, alterar de alguma forma) os dados .

Para alterar o título de um post, você pode usar o the_title gancho de filtro, que é definido da seguinte forma:

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

Isso significa que o filtro tem a tag / nome the_title , o primeiro parâmetro $title é os dados que devem ser alterados (isto é, o título da postagem) e o segundo parâmetro $id é informação extra (em Neste caso, o ID do post).

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

add_filter('the_title', 'strtoupper');

Se dermos uma olhada na função add_filter , vemos que ela é definida da seguinte forma:

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

Especificamos apenas o primeiro e o segundo parâmetro (obrigatório), enquanto o terceiro e quarto parâmetro é definido como seu respectivo valor padrão (por exemplo, 10 e 1 ).

Um filtro mais complexo

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

Suponhamos que desejamos afetar apenas o título da postagem com o ID 42, então é 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, precisamos 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, você precisa procurar onde ele está definido (neste caso: aqui ).

Referências :

por tfrommen 26.04.2013 / 17:27
fonte