Azioni e filtri
Il modo migliore imho è usare un'azione per inserire le funzioni del plugin nei temi.
Esempio 1
Ecco un piccolo plugin per testarlo.
<?php
/** Plugin Name: (#68117) Print Hello! */
function wpse68117_print_hello()
{
echo "Hello World!";
}
add_action( 'wpse68117_say', 'wpse68117_print_hello' );
All'interno del tema:
<?php
/** Template Name: Test »Print Hello!« Plugin */
get_header();
// Now we call the plugins hook
do_action( 'wpse68117_say' );
Cosa succede adesso / The kool kid
In questo modo non dobbiamo controllare l'esistenza di una funzione, un file, una classe, un metodo o forse persino un (non farlo!) Globale $variable
. Il WP intern global lo prende già per noi: controlla se il nome hook è il filtro corrente e lo collega. Se non esiste, non succede nulla.
Esempio n. 2
Con il nostro prossimo plug-in, allegheremo una funzione di callback che accetta un argomento.
<?php
/** Plugin Name: (#68117) Print Thing! */
function wpse68117_print_thing_cb( $thing )
{
return "Hello {$thing}!";
}
add_filter( 'wpse68117_say_thing', 'wpse68117_print_thing_cb' );
All'interno del tema:
<?php
/** Template Name: Test »Print Thing!« Plugin */
get_header();
// Now we call the plugins hook
echo apply_filter( 'wpse68117_say_thing', 'World' );
Questa volta, offriamo all'utente / sviluppatore la possibilità di aggiungere un argomento. Può o echo/print
l'output o persino elaborarlo ulteriormente (nel caso in cui tu abbia un array in cambio).
Esempio n. 3
Con il terzo plug-in, alleghiamo una funzione di callback che accetta due argomenti.
<?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' );
All'interno del 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} ";
}
Questo plugin ora ci consente di inserire due argomenti. Possiamo salvarlo in un $variable
ulteriore processo.
Conclusione
Con l'utilizzo di filtri e azioni si ottengono prestazioni migliori evitando controlli non necessari (confrontare la velocità function_*/class_*/method_*/file_exists
o la ricerca di un globale con in_array()
ricerche di filtro per ~ 1k (?)). Eviti anche di avere tutte quelle Notifiche non necessarie per non impostare variabili, ecc., Poiché il plugin si preoccupa di questo.