Ações & Filtros
A melhor maneira de imho é usar uma ação para trazer as funções do plugin para os temas.
Exemplo # 1
Aqui está um pequeno plugin para testar isso.
<?php
/** Plugin Name: (#68117) Print Hello! */
function wpse68117_print_hello()
{
echo "Hello World!";
}
add_action( 'wpse68117_say', 'wpse68117_print_hello' );
Dentro do tema:
<?php
/** Template Name: Test »Print Hello!« Plugin */
get_header();
// Now we call the plugins hook
do_action( 'wpse68117_say' );
O que acontece agora / O kool kid
Desta forma, não temos que verificar a existência de uma função, um arquivo, uma classe, um método ou até mesmo um (não faça isso!) global $variable
. O estagiário de WP global já leva isso para nós: Ele verifica se o nome do gancho é o filtro atual e o anexa. Se isso não existe, nada acontece.
Exemplo # 2
Com o nosso próximo plugin, estamos anexando uma função de retorno de chamada que leva um argumento.
<?php
/** Plugin Name: (#68117) Print Thing! */
function wpse68117_print_thing_cb( $thing )
{
return "Hello {$thing}!";
}
add_filter( 'wpse68117_say_thing', 'wpse68117_print_thing_cb' );
Dentro do tema:
<?php
/** Template Name: Test »Print Thing!« Plugin */
get_header();
// Now we call the plugins hook
echo apply_filter( 'wpse68117_say_thing', 'World' );
Desta vez, oferecemos ao usuário / desenvolvedor a possibilidade de adicionar um argumento. Ele pode tanto echo/print
a saída, ou até processá-lo ainda mais (no caso de você ter uma matriz em troca).
Exemplo # 3
Com o terceiro plugin, estamos anexando uma função de retorno de chamada que leva dois argumentos.
<?php
/** Plugin Name: (#68117) Print Alot! */
function wpse68117_alot_cb( $thing, $belongs = 'is mine' )
{
return "Hello! The {$thing} {$belongs}";
}
add_filter( 'wpse68117_grab_it', 'wpse68117_alot_cb' );
Dentro do tema:
<?php
/** Template Name: Test »Print Alot!« Plugin */
get_header();
// Now we call the plugins hook
$string_arr = implode(
" "
,apply_filter( 'wpse68117_grab_it', 'World', 'is yours' )
);
foreach ( $string_arr as $part )
{
// Highlight the $thing
if ( strstr( 'World', $part )
{
echo "<mark>{$part} </mark>";
continue;
}
echo "{$part} ";
}
Este plugin agora nos permite inserir dois argumentos. Podemos salvá-lo em $variable
e processá-lo ainda mais.
Conclusão
Com o uso de filtros e ações, você está dando melhor desempenho, evitando verificações desnecessárias (compare a velocidade de function_*/class_*/method_*/file_exists
ou a pesquisa por um global com in_array()
para pesquisas de filtro de ~ 1k (?)). Você também evita ter todos esses Avisos desnecessários para não definir variáveis, etc., pois o plugin se preocupa com isso.