Cachez moi ce membre !

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 commentaires sur “Cachez moi ce membre !

  1. 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. 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. 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. 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. Ă +

Les commentaires sont fermés.