Cachez moi ce membre !

Publié le

par

1, 2, 3 soleil !

J’ai passé ce dernier week end à terminer un plugin pour le taf dont le principal but est de disposer d’un outil de gestion de projets/documents pour les big boss. Pour cela j’ai exploré les customs post types/ custom taxonomies de WordPress, c’est passionnant.

A l’aube ce matin, je me suis intéressé à la visibilité des membres BuddyPress sur la page ‘siteurl’/members. En buvant mon café, muni de mon téléphone, je parcourais google, buddypress.org, wordpress.org et certains blogs pour trouver un morceau de code, une astuce, afin de cacher certains membres du members-loop.php. En fait c’est très lié avec le plugin dont je causais en intro dans la mesure où les big boss ne doivent pas être trop visible sur le site intranet dont je m’occupe.

Ainsi je trouve ça, ça et surtout ça : en bas de cette dernière page, je lis « include (optionnal) Pass a user_id or string of comma separated user_ids to return on these users« .

Alors, j’me dis « ben autant utiliser include pour ne garder que les membres que je veux afficher ! ». Je commence par tâtonner dans le functions.php de mon thème et au bout de quelques recherches dans le code source de la bête je trouve bp_get_total_member_count(). Et je commence par faire un apply_filter sur cette fonction afin de retourner 1 pour voir ce que ça donne 😉
Petit aller-retour dans safari pour m’apercevoir qu’à côté de tous les membres il m’a bien mis 1 ! Le temps passe, faut que je fasse ma marche jusqu’au taf : pause forcée.

Sur le chemin, je cogite sévère.. Je pourrais utiliser les xprofile_fields de BuddyPress : un checkbox et puis le tour est joué.. sauf que la valeur du checkbox est sérialisée et que depuis la version 1.2.6, j’avais lu plus tôt que ça foirait pas mal (j’aurai pu continuer sur cette voie en faisant un maybe_deserialize et en construisant une requête spécifique.. mais pas le temps). Donc je vais au plus simple : les usermeta de WordPress ! Un petit tour chez Justin Tadlock pour se rafraîchir la mémoire, et c’est parti pour un mini plugin 🙂 .

Il aurait été possible de le faire via le fichier functions.php de mon thème, mais voilà ça voulait dire que le paramétrage devait se faire uniquement depuis le wp-admin/profile.php du blog principal. Or comme le plugin évoqué en introduction ne se joue que du côté admin sur un blog fils, j’ai trouvé que cette solution était la meilleure.

A quoi ça ressemble ?

Profil WordPress de l’utilisateur

Si je valide en l’état, un usermeta fixé – avec une grande imagination – à 1 pour l’utilisateur sera stocké. Ensuite, dans le reste de cette mini extension, je mets une fonction qui boucle sur les users of blog (get_users_of_blog()) et à chaque fois que la valeur est différente de celle stockée je remplis un tableau que je retourne implode (les valeurs séparées par des virgules attendues par le paramètre include de bp_has_members()).

Il ne reste plus qu’à s’occuper de la fonction chargée d’alimenter bp_has_members().. là ça a été légèrement plus long et j’ai pas mal merdouillé jusqu’à ce que je lise (enfin – j’aurai dû commencer par ça !) les commentaires au dessus de la fonction bp_ajax_querystring(). Mon histoire s’est résolue en appliquant un filtre sur la fonction bp_dtheme_ajax_querystring().

Bien entendu, si votre thème BuddyPress n’utilise pas cette fonction.. ça m’étonnerait que ça fonctione, mais si vous avez fait un child theme ou que vous utilisez le bp-default : y a de forte chance que ça le fasse 🙂

4 réponses à “Cachez moi ce membre !”

  1. Avatar de zouzou
    zouzou

    bonjour

    dès que j’active cette extension :

    Warning: Missing argument 2 for bp_hide_members_include_hack() in /homepages/30/dxxxxxxx/htdocs/reseau_social/wp-content/plugins/bp-hide-members/bp-hide-members.php on line 70

    Kesako?

  2. Avatar de imath

    Bonjour @zouzou,

    C’est un warning qui indique qu’un des arguments de la fonction n’a pas été envoyé. J’ai dernièrement retouché ce trick, je mettrai le fichier à jour prochainement.

    En attendant, ligne 70, tu peux éventuellement modifier le code ainsi :

    bp_hide_members_include_hack($query_string, $object=«  »){

    A+

  3. Avatar de zouzou
    zouzou

    Merci @imath.

    Plus de message d’erreur.

    mais lorsque je consulte la fiche d’un utilisateur, dans sa liste d’amis apparaît tout l’annuaire.
    J’aurais aimé qu’on ne me voit pas en ligne, mais on me voit, en tout cas une autre admin me voit (widget que tu as créé « amis »…).

    A+

    1. Avatar de imath

      en fait ce trick intercepte un hook différent de bp show friends, c pour ça que dans la liste d’avatars tu y es toujours.. Pour pouvoir « t’enlever » cela impliquerait de filtrer une fonction core de BuddyPress.. risqué mais à étudier. Merci pour tes commentaires. à+