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.
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.
Respostas:
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 à pilhaNo 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 Array
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.
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
or add_filter
, o WordPress primeiro calcula um ID "exclusivo" para não substituir os retornos de chamada já anexados.
$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
Em seguida, ele adiciona seu retorno de chamada à global $wp_filter
pilha:
$wp_filter[ $tag ][ $priority ][ $idx ] = array(
'function' => $function_to_add,
'accepted_args' => $accepted_args
);
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ó.
foreach ( (array) current( $wp_filter[ $tag ] ) as $the_ )
{
call_user_func_array(
$the_['function'],
array_slice(
$args,
0,
(int) $the_['accepted_args']
)
);
}
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:
add_action('wp_head', 'add_content_to_head');
function add_content_to_head() {
echo 'Your Content';
}
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:
add_action('genesis_header', 'add_content_to_header');
function add_content_to_header() {
echo 'Your Content';
}
Aqui está a aparência do gancho se você abriu o arquivo header.php na estrutura do tema Genesis:
do_action( 'genesis_header' );
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:
add_filter( 'comment_author_says_text', 'custom_comment_author_says_text' );
function custom_comment_author_says_text() {
return 'author says';
}
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:
add_filter( 'excerpt_length', 'change_excerpt_length' );
function change_excerpt_length($length) {
return 50;
}
Você encontrará a função the_excerpt () no arquivo wp-includes / post-template.php.
Aqui está o que parece:
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.