methods de ação e gancho

Estou tentando entender como os methods de gancho funcionam no WordPress. Eu entendo que quando do_action é chamado WP procura todos os ouvintes registrados e invoca-os de acordo com a prioridade estabelecida.

Como o núcleo do WordPress recolhe todos os methods de gancho registrados em arquivos diferentes? Por exemplo, eu declarei add_action para wp_head no meu rodapé. Será executado? Então, parece que o WordPress deve coletar todos os dados que iteram sobre todos os arquivos?

Por favor, explique isso.

Solutions Collecting From Web of "methods de ação e gancho"

Sua analogia aqui é parcialmente correta, mas incompleta:

Eu entendo que quando do_action é chamado wp procura todos os ouvintes registrados e os invoca de acordo com a prioridade estabelecida.

Você precisa considerar o que acontece quando você chama add_action . O WordPress nunca procura as instruções add_action , tem as de uma lista. Quando você chama add_action , ele atualiza uma lista de callbacks para chamar quando essa ação acontece.

Com isso em mente, é mais útil usar uma analogia de events.

  • do_action( 'init' ) a ação ‘init’
  • add_action('init', 'myfunction' ) Quando o evento init acontece, chame myfunction
  • function myfunction() {} Ah, o evento init aconteceu

A analogia dos events ajuda enormemente ao entender como as ações e os filtros funcionam, porque há uma série de problemas que ocorrem quando você não entende relacionado ao tempo.

add_action o seu exemplo de chamar add_action no rodapé para a ação wp_head . wp_head triggers quando wp_head() é chamado, o que deve acontecer no header entre as tags

. Se tentarmos adicionar uma ação no rodapé, então será adicionado, e a próxima vez que wp_head() for chamado, ele triggersrá. Mas wp_head já foi chamado, é muito tarde. É como pedir a uma criança “lembre-se de empacotar sua bolsa antes da festa” logo após a festa ter terminado.

Com isso em mente, eu tenho algumas regras gerais e recomendações que atuariam como heurísticas para um código mais sustentável:

  • Coloque todo o código dentro de funções que triggersm em events. init , after_theme_setup , wp_head e admin_init devem cobrir a maior parte
  • O único código fora de um gancho ou filtro Seria arquivos de modelo, e as chamadas iniciais de add_action
  • Não adicione filtros e ganchos dentro de modelos, faça-os em functions.php ou em um plugin, ou se esses arquivos utilizam include ou require instruções para uma pasta incluída

Existem algumas situações em que você deseja quebrar essas regras, geralmente para evitar a recursion ao salvar coisas, etc., mas essas devem ser raras. Experimente e veja o que funciona e veja esta publicação que mostra quais ações triggersm quando e o que é seguro usar naqueles tempos

Uma nota final, ações e filtros são a mesma coisa. Internamente, eles são tratados da mesma forma, mas existem algumas diferenças importantes se você quiser que as coisas funcionem bem:

  • Ações fazem coisas
  • Filtros modificam coisas
  • As ações não precisam retornar nada
  • Os filtros são passados ​​o que está sendo “filtrada” como o primeiro argumento, e sempre devolvê-lo ou uma versão modificada
  • Os filtros são chamados muito, então nunca faça trabalho pesado em filtros, ele irá abrandar as coisas massivamente, apenas modificar, fazer o trabalho é para que ações são
  • Desconfie de engatar na tradução e escape de filtros, pode ser perigoso e tem um grande impacto no desempenho, pois esses são os filtros mais comuns
  • Existe uma ação / filtro particularmente perigoso chamado all , que triggersrá para cada filtro e gancho. Útil às vezes para debugging, mas eu recomendaria usar um plugin, como o monitor de consulta, em vez disso.

Todas as suas ações pertencem às suas functions.php , assumindo que você está construindo um tema. É aqui que você adiciona ações a determinados events em seus modelos.

Agora, uma vez que leu functions.php WP tem uma lista de ações que deve realizar em determinados pontos em seus modelos de tema. Existem vários ganchos de ação predefinidos, como wp_head() e wp_footer() , que são taquigrafia para do_action('wp_head') e do_action('wp_footer') . Eles são definidos, então os plugins têm lugares padrão onde eles podem adicionar sua ação. Você também pode definir seus próprios ganchos de ação com do_action .

Então, por exemplo, se você quiser adicionar a mesma imagem no final de cada publicação, você definirá nas suas functions.php a seguinte ação:

 add_action ('my_post_image', 'generate_my_post_image'); function generate_my_post_image () { echo ''; } 

Então em seu index.php você teria:

 while (have_posts()) { ... generate your post ... do_action ('my_post_image'); }