Utiliser des paramètres personnalisés avec les filtres et actions de WordPress

wordpress-filters

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 :

1
2
3
4
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 :

1
2
3
4
5
$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!

Tags :   
Julien Maury
01
fév
2013
@0:31

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 :)

#
Julio Potier
01
fév
2013
@0:49

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

#
Julien Maury
01
fév
2013
@1:01

Template, plugin ? o__O

"En réponse à Julio Potier"Répondre
#
Julio Potier
01
fév
2013
@1:15

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

#
Julien Maury
01
fév
2013
@1:35

Ah oui d'accord, j'étais sur autre chose dsl. Merci de tes précisions, ça aidera les gens moin malins comme moi :D

"En réponse à Julio Potier"Répondre
#
Daniel Roch
01
fév
2013
@11:25

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).

#
Julio Potier
01
fév
2013
@11:35

@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.

#
Daniel Roch
01
fév
2013
@12:00

@julio : oui, c'est vrai. Cela ne concernera que quelques sites. Mais mieux vaut le savoir quand même ;)

#
Greg
01
fév
2013
@14:25

Merci Daniel pour l'info sur le cache :)

"En réponse à Daniel Roch"Répondre
#

Salutations, étranger.

Envie d'un avatar?
Gravatar
Do not fill the next field
:D :lol: :) ;) :P 8) :roll: :( :cry: :oops: :? :| :o 8O :x :twisted: :evil: :mrgreen:

.
Afficher le panneau des Smilies:D   Afficher le panneau des balises html utilisables Balises
Vous pouvez utiliser ces balises:
<b></b> <i></i> <del></del> <a href=""></a> <abbr title=""></abbr> <cite></cite> <code></code> <pre lang="" line=""></pre>
Exemples pour "pre": lang="css", "html", "javascript", "jquery", "php", "sql"... (ou laisser vide)