Como filtros e ganchos realmente funcionam no WordPress?
Estou perguntando sobre algo avançado. Como é implementado em PHP? Por exemplo, como ele coleta todos os ganchos dos diferentes plugins e os "anexa" aos ganchos principais etc.
Até onde eu sei, não existem 'ganchos' ou 'filtros' no php, existem funções. O Wordpress possui funções especiais que antes de suas execuções usam um retorno de chamada de outras funções.
@OfirBaruch, tenho certeza de que o OP estava se referindo à sua implementação no WordPress e não estava sugerindo que houvesse alguma implementação nativa do PHP.
Tom Auger
Respostas:
33
visão global
Basicamente, a " API de plug-in " , que convoca filtros e ganchos, consiste nas seguintes funções:
No geral, existem alguns globais (o que mais no mundo WordPress) envolvidos:
global $wp_filter, $wp_actions, $wp_current_filter, $merged_filters;
O primeiro $wp_filteré um global Arrayque contém todos os nomes de filtro como sub-matrizes. Cada um desses subarrays contém ainda mais subarrays que são retornos de chamada convocados em uma matriz prioritária.
Breve em profundidade
Portanto, quando uma função de execução é chamada, o WordPress pesquisa essas matrizes globais pelas chaves com esse nome. Em seguida, os retornos de chamada anexados são executados prioridade após prioridade. A única coisa que acontece na frente são os retornos de chamada anexados ao allfiltro.
Quando você adiciona um retorno de chamada usando add_actionor add_filter, o WordPress primeiro calcula um ID "exclusivo" para não substituir os retornos de chamada já anexados.
Como você pode ver, o subconjunto principal é o $tag(ou o nome da ação / filtro), então tudo é convocado sob uma prioridade específica e, em seguida, a string de identificação / retorno de chamada "única" é usada como chave.
Mais tarde, quando um filtro é chamado - acontecendo com o $tag/ action- / filter-name - a matriz é pesquisada e os retornos de chamada são chamados. Como está sendo usado call_user_func_array, não importa realmente quantos argumentos estão anexados. WordPress resolve isso por si só.
não esqueça que, ao passar pelos retornos de chamada, ele ordena a execução de vários retornos de chamada no mesmo gancho usando sua "prioridade", que é definida (opcionalmente) com add_action () e apply_filters () e o padrão é 10.
Tom Auger
1
@ TomAuger Por favor, sinta-se à vontade para adicionar notas e edições adicionais à resposta.
kaiser
5
Os ganchos estão incluídos nos arquivos principais do WordPress e em alguns arquivos de temas principais. Eles permitem que você conecte o conteúdo em um local específico no arquivo.
Um exemplo é o gancho wp_head no WordPress. Você pode usar esse gancho no tema do seu filho para adicionar conteúdo nesse local '
Alguns temas premium também incluem ganchos de ação que você pode usar em um tema filho para fazer a mesma coisa. Aqui está um mapa visual que inclui todos os ganchos de ação e a posição em que eles produzem seu conteúdo na estrutura de temas do Genesis.
Os filtros permitem modificar a saída de uma função existente e estão incluídos nos arquivos principais do WordPress e em algumas estruturas de tema pai, como o Genesis.
function the_excerpt(){
echo apply_filters('the_excerpt', get_the_excerpt());}
Você também pode usar ganchos e filtros em plug-ins para fazer exatamente a mesma coisa e o código não será perdido quando você atualizar o tema pai ou o WordPress.
Basicamente, ganchos e filtros permitem que você personalize e modifique o WordPress e o tema principal sem editar os arquivos principais do WordPress ou os arquivos de tema principais.
É significativamente mais fácil personalizar um tema filho quando a estrutura do tema pai inclui ganchos e filtros, porque você nunca precisa editar os arquivos de modelo dos temas pais. Dessa forma, você também pode alterar os temas com segurança.
Esta é uma ótima visão geral dos ganchos e filtros, mas receio que erre totalmente a pergunta do OP, que é sobre os aspectos internos de como os ganchos funcionam e como o WordPress os cria, armazena e processa. Ótima resposta; você provavelmente deve vincular ao seu tutorial nos Sites WP.
Tom Auger
Ok, eu vou excluí-lo. Por mais que eu devesse ter lido melhor a pergunta, pensei que as respostas já dadas seriam mais fáceis para os iniciantes entenderem se soubessem o básico primeiro.
Brad Dalton
2
Brad, cancelei a exclusão, pois acho que pode ser útil ter essas informações aqui também. Se você não concordar, apenas mencione / faça ping aqui e eu o removerei novamente.
Respostas:
visão global
Basicamente, a " API de plug-in " , que convoca filtros e ganchos, consiste nas seguintes funções:
apply_filters()
- executardo_action
- executarapply_filters_ref_array()
- executardo_action_ref_array()
- executaradd_filter()
- adicionar à pilhaadd_action()
- adicionar à pilhaInternals básicos
No geral, existem alguns globais (o que mais no mundo WordPress) envolvidos:
O primeiro
$wp_filter
é um globalArray
que contém todos os nomes de filtro como sub-matrizes. Cada um desses subarrays contém ainda mais subarrays que são retornos de chamada convocados em uma matriz prioritária.Breve em profundidade
Portanto, quando uma função de execução é chamada, o WordPress pesquisa essas matrizes globais pelas chaves com esse nome. Em seguida, os retornos de chamada anexados são executados prioridade após prioridade. A única coisa que acontece na frente são os retornos de chamada anexados ao
all
filtro.Quando você adiciona um retorno de chamada usando
add_action
oradd_filter
, o WordPress primeiro calcula um ID "exclusivo" para não substituir os retornos de chamada já anexados.Em seguida, ele adiciona seu retorno de chamada à
global $wp_filter
pilha:Como você pode ver, o subconjunto principal é o
$tag
(ou o nome da ação / filtro), então tudo é convocado sob uma prioridade específica e, em seguida, a string de identificação / retorno de chamada "única" é usada como chave.Mais tarde, quando um filtro é chamado - acontecendo com o
$tag
/ action- / filter-name - a matriz é pesquisada e os retornos de chamada são chamados. Como está sendo usadocall_user_func_array
, não importa realmente quantos argumentos estão anexados. WordPress resolve isso por si só.fonte
Os ganchos estão incluídos nos arquivos principais do WordPress e em alguns arquivos de temas principais. Eles permitem que você conecte o conteúdo em um local específico no arquivo.
Um exemplo é o gancho wp_head no WordPress. Você pode usar esse gancho no tema do seu filho para adicionar conteúdo nesse local '
Exemplo:
Alguns temas premium também incluem ganchos de ação que você pode usar em um tema filho para fazer a mesma coisa. Aqui está um mapa visual que inclui todos os ganchos de ação e a posição em que eles produzem seu conteúdo na estrutura de temas do Genesis.
Exemplo:
Aqui está a aparência do gancho se você abriu o arquivo header.php na estrutura do tema Genesis:
Aqui está uma lista de ganchos do WordPress que você pode usar de várias maneiras.
Os filtros permitem modificar a saída de uma função existente e estão incluídos nos arquivos principais do WordPress e em algumas estruturas de tema pai, como o Genesis.
Aqui está uma lista dos filtros que você pode usar com o Genesis Design Framework
Aqui está uma lista dos filtros incluídos no WordPress
Aqui está um exemplo de como você pode usar um filtro em uma estrutura de temas como o Genesis:
O código acima pode ser usado em um tema filho para modificar o autor diz o texto em seus comentários. Funciona em qualquer tema.
Aqui está outro exemplo que personaliza o comprimento dos trechos para 50 palavras:
Você encontrará a função the_excerpt () no arquivo wp-includes / post-template.php.
Aqui está o que parece:
Você também pode usar ganchos e filtros em plug-ins para fazer exatamente a mesma coisa e o código não será perdido quando você atualizar o tema pai ou o WordPress.
Basicamente, ganchos e filtros permitem que você personalize e modifique o WordPress e o tema principal sem editar os arquivos principais do WordPress ou os arquivos de tema principais.
É significativamente mais fácil personalizar um tema filho quando a estrutura do tema pai inclui ganchos e filtros, porque você nunca precisa editar os arquivos de modelo dos temas pais. Dessa forma, você também pode alterar os temas com segurança.
fonte