Je fais de la lecture silencieuse sur les forums meta.discourse depuis des années, en glanant des extraits et en apprenant comment améliorer un site client qui utilise Wordpress + Memberpress + Discourse (auto-hébergé).
J’avais besoin (et j’ai toujours besoin) d’attribuer des Groupes Discourse basés sur les Adhésions Memberpress.
Pour référence :
- Le site client (fournisseur SSO) : https://secretsofsolo.com/
- Le site Discourse : https://jamcircle.secretsofsolo.com/
Précédemment (depuis quelques années) j’utilisais la méthode de filtre add_filter( 'wpdc_sso_params' :
L’inconvénient semblait être que les Groupes Discourse ne se mettaient à jour qu’à la connexion de l’utilisateur, je voulais quelque chose qui ait un effet plus immédiat (par exemple, lorsqu’une transaction Memberpress a lieu).
Certes, mes propres compétences en codage PHP sont assez basiques. Je suis plutôt un développeur front-end HTML/CSS.
Maintenant, j’ai réécrit mes fonctions pour le site client en utilisant une meilleure fonction WP Discourse décrite ici
Qui utilise les fonctions : \\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group et : \\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group.
Maintenant, je peux écouter les événements Memberpress et ajouter les Groupes Discourse avec ce bloc de code (functions.php) :
add_action('mepr-event-create', 'listen_to_mepr_events');
function listen_to_mepr_events($event) {
$obj = $event->get_data();
//$obj pourrait être un objet MeprTransaction ou un objet MeprSubscription
if(!($obj instanceof MeprTransaction) && !($obj instanceof MeprSubscription)) {
return; // rien à faire ici si nous ne traitons pas une transaction ou un abonnement
}
$member = $obj->user(); // obtenir les données de l'objet membre à partir de l'objet événement
$user_id = $member->ID; // obtenir l'ID de l'utilisateur à partir de l'objet
if($member->is_active_on_membership($obj)) { // adhésion active
if(3780 == $obj->product_id) { // Adhésion MENSUELLE
$add_group = 'Ksenia_Basic'; // Nom du Groupe Discourse
$remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
// ajouter au Groupe Discourse
\\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// supprimer des Groupes Discourse
\\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
else if(3847 == $obj->product_id) { // Adhésion de 6 mois (Essentielle)
$add_group = 'Ksenia_Essential'; // Nom du Groupe Discourse
$remove_groups = ['Ksenia_Basic','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
// ajouter au Groupe Discourse
\\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group( $user_id, $add_group );
// supprimer des Groupes Discourse
\\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
}
}
else { // aucune correspondance
}
}
Référence supplémentaire : le hook d’action Memberpress add_action('mepr-event-create', 'listen_to_mepr_events'); peut être trouvé ici :
Pour information, ceci est une version simplifiée de ce que j’utilise sur le site de mon client. La version complète (qui inclut la gestion de Learndash + Mailster) peut être trouvée ici : Memberpress + Learndash + Mailster + WP Discourse · GitHub
Merci à tous ceux qui ont fourni des extraits et du soutien sur ce forum au fil des ans. Je sais qu’il y a beaucoup de lecteurs silencieux comme moi qui trouvent cette ressource extrêmement précieuse et utile.
Si vous avez des suggestions ou si vous voyez des problèmes avec mon exemple, faites-moi savoir comment je peux l’améliorer.