Si vous êtes familier avec le fichier functions.php de votre thème WordPress, alors vous connaissez certainement les filtres et actions, les hooks comme on les appelle.
Une utilisation basique donne quelque chose comme ça :
1234
add_filter('the_content', 'ajout_de_bouton');
function ajout_de_bouton( $content = '' ) {
return $content . ' <br/><span class="button">Clic me</span>';
}
Ok, mais si je veux passer à ma fonction ajout_de_bouton()
un autre paramètre qui n’est pas prévu par WordPress, un paramètre perso ?
Et bien c’est possible, et c’est même très simple :
12345
$bar = 'Allez, clique moi !';
add_filter('the_content', create_function('$ct', 'return ajout_de_bouton($ct, "'.$bar.'");'));
function ajout_de_bouton( $content = '', $text = 'Clic me' ) {
return $content . ' <br/><span class="button">'.$text.'</span>';
}
Voilà, sur cet exemple (gardé volontairement simple) j’ai pu passer le texte du bouton au moment de lancer le filtre, mais cela pourrait être n’importe quoi comme variable, voire même plusieurs variables. (notez tout de même les guillemets doubles autour de $bar dans le create_function()
, car je passe un string)
Je vous laisse cogiter là-dessus ;)
See ya!
Commentaires
Commentaire de Julien Maury.
Salut,
Encore une belle trouvaille issue de l’investigation. Je ne veux pas abuser mais l’exemple ne me convient pas perso. Du markup à la suite du content? Je passe par le template non? Pas le même délire avec les variable en revanche :)
Commentaire de Julio Potier @ BoiteAWeb.
Hey, merci ! j’ai déjà utilisé ton astuce, super trouvaille, je vais en abuser !
@ju : Si je mets ça dans un plugin qui ajoute un bouton social, non je ne passe pas par le template, l’exemple est très bon :D
Commentaire de Julien Maury.
Template, plugin ? o__O
Commentaire de Julio Potier @ BoiteAWeb.
Ce que je veux dire c’est que je ne peux pas mettre le markup directement dans mon template single.php par exemple puisque son code peut-être utilisé dans un plugin.
Peut-être j’ai pas bien compris ton « Je passe par le template non? » :O
Commentaire de Julien Maury.
Ah oui d’accord, j’étais sur autre chose dsl. Merci de tes précisions, ça aidera les gens moin malins comme moi :D
Commentaire de Daniel Roch.
Excellente idée, et j’avoue ne pas souvent l’utiliser dans mes plugins et thèmes.
Attention cependant, car dans certains cas de figure (relativement rares), cela peut nuire au site : toute fonction créée avec create_function ne peut être mise en cache par les caches serveur (APC, memcached, …). Si vous êtes dans ce cas, il ne faudra pas utiliser create_function (Cf. http://codex.wordpress.org/Function_Reference/add_filter#Beware).
Commentaire de Julio Potier @ BoiteAWeb.
@daniel : Tu remarqueras que j’ai utilisé son astuce dans ton code d’hier ;) #teaser
Concernant le cache je suis d’accord, mais cela posera un problème de perf dès lors ou la fonction en question est plus signifiante qu’un simple return comme ici. Je pense vraiment pas qu’il y ai de quoi se faire peur dans notre cas. Jamais.
Commentaire de Daniel Roch.
@julio : oui, c’est vrai. Cela ne concernera que quelques sites. Mais mieux vaut le savoir quand même ;)
Commentaire de Greg.
Merci Daniel pour l’info sur le cache :)