Explicação para a função apply_filters e suas variáveis


16

Estou aprendendo a criar formulários html usando PHP, tomando um exemplo do plug-in "simplr form registration".

Eu estou olhando para este código:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

Você pode, por favor, explicar o que está acontecendo aqui - o que a função faz, por que a necessidade de 'simplr-reg-instructions' e 'simplr-reg'?

Por que essa linha não pode ser simplesmente:

$form .= 'Please fill out this form to sign up for this site' ;

Eu li a referência da função, mas ainda não consigo descobrir.

Respostas:


22

Essa linha está usando duas funções diferentes que precisam de duas explicações separadas.

__ ()

Esta é uma função de tradução. Se as configurações forem feitas corretamente, ele converterá o primeiro parâmetro de uma lista de strings pré-traduzidas. Se uma instalação tiver um arquivo com uma tradução compilada para esta função, ela será usada. Obviamente, o plugin precisa empacotar sua própria tradução, daí o segundo parâmetro. simplr-reginforma __()que a tradução da string 'Please fill out this form to sign up for this site'deve estar no arquivo de tradução associado 'simplr-reg'(isso é feito anteriormente no plugin por meio da load_plugin_textdomain()função).

A função então retorna a tradução. Se não houver tradução a ser retornada (por exemplo, o idioma atual não possui uma tradução compilada, a string não possui uma tradução compilada para esse pacote, etc.), a entrada original será retornada.

Portanto, para um site WordPress em inglês, __( 'This', 'simplr-reg' )é funcionalmente o mesmo que 'This'. Para saber mais sobre l10n (Localização), leia-o no codex:

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters ()

Esta função permite filtrar os valores usados ​​pelo plug-in conforme necessário. Este é um dos principais conceitos para entender como desenvolvedor de plugins. O WordPress é estendido através de ganchos, que são basicamente pontos de acesso, permitindo que você cronometre a execução das ações do seu plug-in e / ou manipule informações / dados que o WordPress usa, etc.

Para manipular dados como o trecho de código que você perguntou sobre, você usaria a função add_filter(). Aqui está um exemplo básico de como isso funciona:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

Você provavelmente reconhecerá o primeiro argumento lá. É o mesmo usado add_filteracima. Este é o nome do gancho. O segundo argumento é o retorno de chamada do filtro. Deve ser um retorno de chamada válido para uma função ( leia mais sobre retornos de chamada aqui ). Essa linha de código diz "Quando o 'simplr-reg-instructions'gancho for executado, execute a função com o retorno de chamada que forneci". apply_filters()executa o gancho encontrado em seu primeiro argumento, significando essencialmente "executar todas as funções registradas para esse gancho". apply_filtersdepois passa todos os outros argumentos (nesse caso 'Please fill out this form to sign up for this site') para as funções nesse filtro. Portanto, o retorno de chamada que usei acima deve ficar assim:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

Existem dois tipos de ganchos no WordPress: filtros (do tipo que estamos usando aqui) e ações. A principal diferença entre os dois é que os filtros esperam que você retorne algo e as ações não. Portanto, para este filtro, meu exemplo acima adiciona um pouco de html 'Please fill out this form to sign up for this site'e o retorna.

Leia mais sobre ações e ganchos aqui:

http://codex.wordpress.org/Plugin_API


John, muito obrigado. Ótima resposta! Mas eu não consigo encontrar um sequer "add_filter ( 'Simplr-REG-instruções', ..." linha nos arquivos de plugin Como pode o Apply_Filter prazo do que.?
Ash

1
Se não houver filtros adicionados a um gancho, ele retornará a entrada original de volta. O filtro não existe para o plug-in usar, ele pode ser usado se você precisar / quiser, para não precisar modificar o próprio plugin.
John P Bloch

+1 Excelente Explicação - lê-se como o Docs Should ;-)
Eddie B

+1 Grande resposta, exatamente o que eu estava procurando, eu estava ficando extremamente confuso, mas agora tudo está tão claro;)
doz87

5

Você tem duas funções diferentes aqui apply_filterse__()

A função apply_filters é a maneira do WordPress de permitir que você altere / edite o valor das variáveis ​​usando suas próprias funções de retorno de chamada e a add_filterfunção aceita muitos argumentos, mas os importantes são os dois primeiros:

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

$ tag é o nome do gancho de filtro usado em, add_filterpor exemplo:

add_filter($tag,callback_function);

$ value é o valor real que você poderá alterar ou editar.

$ var são variáveis ​​que sua função de retorno de chamada pode usar, uma ou mais.

__() A função é usada para traduções:

__($message,$text_domain);

$ message é a mensagem real a ser traduzida.

$ text_domain é a tag do domínio de texto usada para carregar a tradução do plugin ou do tema com load_plugin_textdomain()

o que faz?

Ele procura no módulo de localização a tradução de $ message e passa a tradução para a instrução de retorno do PHP. Se nenhuma tradução for encontrada para $ message, ela retornará apenas $ message.

Portanto, agora que as duas funções no seu caso funcionam da mesma maneira, os apply_filters enviarão a qualquer função de retorno de chamada associada ao simplr-reg-instructionsfiltro hook o valor traduzido (se houver) de 'Por favor, preencha este formulário para se inscrever neste site' usando o texto- domínio desimplr-reg


Bainternet, muito obrigado! Como é que não consigo encontrar nenhuma linha "add_filter ('simplr-reg-instructions',") nos arquivos do plugin?
Ash

É um gancho deixado para desenvolvedores que desejam estender ou filtrar a funcionalidade de plug-ins.
Bainternet

Então add_filter não é esperado aqui? Eu não entendo o porquê. O apply_filters não deve executar todas as funções associadas ao seu gancho pelas funções add_filter?
Ash

apply_filtersé um espaço reservado que permite ligar os seus próprios próprias funções usando add_filter, por isso não add_filter não é esperado a menos que você adicione própria de sua própria
Bainternet
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.