#BuddyPress Important : le filtre groups_forbidden_names

Publié le

par

Crédits Photo : Emergency Snake Forces Combine by Lomo-Cam, on Flickr

Bonsoir les créateurs de plugins BuddyPress,

Ce dimanche, après avoir travaillé à ma conférence prévue pour le prochain WordCamp parisien et qui précisément traitera de notre plugin WordPress préféré, je me suis intéressé à un bug qui m'a été remonté au sujet d'un de mes plugins : BP Code Snippets.

En passant, lecteur, si tu utilises ce plugin et que tu veux m'aider à résoudre ce bug qui est apparu suite à la mise sur orbite de la superbe 3.5 de WordPress, tu peux t'amuser à tester le fix que je décris dans ce forum. Je ferai le maximum pour résoudre rapidement (j'ai été pas mal occupé ces derniers temps..).

Bref, alors, que je réalisais les tests de mon fix, j'ai créé un groupe du même nom que le slug de mon plugin, à savoir snippets. Rien d'extraordinaire me direz-vous.. Eh bien, figurez-vous que je venais de réveler un nouveau bug de mon plugin! Et ce juste en créant ce groupe !!

si le slug du groupe == le slug de notre plugin alors Dang 🙁

Ainsi, dans le cas où le slug du groupe est identique à celui du plugin, la navigation de l'utilisateur est ajoutée à celle du groupe. Comme vous pouvez le voir sur l'illustration on a bien les liens vers la page des snippets et des favoris qui sont normalement réservés à la zone de profil de l'utilisateur.

Il fallait donc que je trouve le moyen d'éviter qu'un utilisateur ne crée cette situation, et concrètement d'interdire l'utilisation du terme snippets pour le slug des groupes. Or BuddyPress contient un tableau qui est vérifié au moment de la création des slugs des groupes et le plus beau c'est que ce tableau est filtrable 🙂

Pour information, ce tableau est initialisé dans BP_Groups_Component::setup_globals() à la ligne 199 du script bp-groups/bp-groups-loader.php. Le nom du filtre est groups_forbidden_names. Il s'agit donc de l'intercepter pour l'enrichir du slug de notre plugin. Ci-dessous le filtre que j'utilise pour BP Code Snippets :

Une fois, le filtre en place, lorsqu'un utilisateur créera un groupe en utilisant un nom équivalent au slug de notre plugin, BuddyPress se chargera d'ajouter un rand() au slug du groupe au moment de sa création : génial !

Wow, comment j'ai pu passer à côté de ça ??

Par curiosité, j'ai voulu benchmarker mes petits collègues créateurs d'extensions BuddyPress pour voir comment il gérait la chose. Et après quelques tests sur certains plugins, je me suis senti moins seul ! En effet j'ai pu reproduire ce bug sur 3 de mes tests. J'en ai déduit, peut-être un peu vite, que c'était un oubli fréquent chez nous ;). En même temps, la probabilité de créer ce bug s'amenuise si on opte pour un slug de plugin compliqué du style 'slug-demonsuperplugin' !!

Toutefois, pour éviter tout risque, je vous invite à ne pas oublier ce filtre dans vos petits chefs d'oeuvre ..

A+

Une réponse à “#BuddyPress Important : le filtre groups_forbidden_names”

  1. Avatar de Dan

    Bien vu ! Et ça me fait penser que le phénomène affecterait aussi la création de forum
    En effet, le slug « forums » est utilisé par BP lors de la créa de forum de groupe.
    Le même terme apparaît par défaut comme forum base name si jamais on utilise bbPress séparément.

    En clair BP et BBP utilisent le même slug. Ce n’est pas gênant quand on utilise ces 2 plugins sur des installs séparées Mais si d’aventure on se plaît à activer les forums de groupe ET bbPress comme forum général, c’est BP qui reste prioritaire au niveau du slug.
    Les bugs qui sont reportés à ce sujet sont assez comiques, exactement ce qu tu as constaté sur le menu par ex….. Et bien entendu, ce n’est ni expliqué ni documenté, encore moins clairement signalé lors du déballage….

    Le plus troublant, c’est que ce blocage de nom ne soit pas activé d’office pour BP/BBP par ceux-là même qui ont créé le filtre group_forbidden_name !