Actions et filtres
La meilleure façon à mon humble avis est d'utiliser une action pour intégrer des fonctions de plugin dans des thèmes.
Exemple 1
Voici un petit plugin pour tester cela.
<?php
/** Plugin Name: (#68117) Print Hello! */
function wpse68117_print_hello()
{
echo "Hello World!";
}
add_action( 'wpse68117_say', 'wpse68117_print_hello' );
À l'intérieur du thème:
<?php
/** Template Name: Test »Print Hello!« Plugin */
get_header();
// Now we call the plugins hook
do_action( 'wpse68117_say' );
Que se passe-t-il maintenant / The kool kid
De cette façon, nous n'avons pas à vérifier l'existence d'une fonction, d'un fichier, d'une classe, d'une méthode ou peut-être même d'un (ne faites pas ça!) Global $variable
. Le WP intern global prend déjà cela pour nous: il vérifie si le nom du hook est le filtre actuel et le joint. S'il n'existe pas, rien ne se passe.
Exemple # 2
Avec notre prochain plugin, nous attachons une fonction de rappel qui prend un argument.
<?php
/** Plugin Name: (#68117) Print Thing! */
function wpse68117_print_thing_cb( $thing )
{
return "Hello {$thing}!";
}
add_filter( 'wpse68117_say_thing', 'wpse68117_print_thing_cb' );
À l'intérieur du thème:
<?php
/** Template Name: Test »Print Thing!« Plugin */
get_header();
// Now we call the plugins hook
echo apply_filter( 'wpse68117_say_thing', 'World' );
Cette fois, nous offrons à l'utilisateur / développeur la possibilité d'ajouter un argument. Il peut soit echo/print
la sortie, soit même la traiter plus loin (au cas où vous auriez un tableau en retour).
Exemple # 3
Avec le troisième plugin, nous attachons une fonction de rappel qui prend deux arguments.
<?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' );
À l'intérieur du thème:
<?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} ";
}
Ce plugin nous permet désormais d'insérer deux arguments. Nous pouvons l'enregistrer dans un $variable
et le traiter ultérieurement.
Conclusion
En utilisant des filtres et des actions, vous donnez de meilleures performances en évitant les vérifications inutiles (comparez la vitesse function_*/class_*/method_*/file_exists
ou la recherche d'un global avec in_array()
des recherches de filtre de ~ 1k (?)). Vous évitez également d'avoir tous ces avis inutiles pour les variables non définies, etc., car le plugin se soucie de cela.