Memberpress + WP Discourse (gestion des groupes)

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 :

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.

6 « J'aime »

Merci Andrew, je vais examiner cela demain et vous donner une réponse plus détaillée lundi. Juste pour une note initiale, avez-vous jeté un œil au plugin de synchronisation de groupe Memberpress développé par @fzngagan ?

4 « J'aime »

Basé sur les rôles - sympa :sunglasses: Non, je n’avais pas vu ce plugin. Excellente contribution.

1 « J'aime »

Comment dois-je procéder pour implémenter cela ? J’utilise Wordpress avec Memberpress, et je viens d’installer Discourse sur un sous-domaine hébergé sur un droplet DigitalOcean. Dois-je littéralement télécharger le code comme je le ferais pour un plugin ?

Oui, wp-discourse-mepr-sync est juste un plugin Wordpress d’un seul fichier.

1 « J'aime »

J’ai jeté un coup d’œil au code. Au cas où ce ne serait pas clair, le plugin Memberpress Sync dépend du code du plugin WP Discourse : WP Discourse – WordPress plugin | WordPress.org. Cela signifie que vous devrez également installer, activer et configurer le plugin WP Discourse : Connect WP Discourse to Discourse. Vous devrez également configurer votre site WordPress comme fournisseur DiscourseConnect pour votre site Discourse. Les détails sur la configuration sont ici : Configure single sign-on (SSO) with WP Discourse and DiscourseConnect.

Il y a quelque chose dans le plugin Memberpress Sync dont je ne suis pas sûr. Il me semble qu’il y a deux identifiants de produit Memberpress et deux groupes Discourse codés en dur dans le code du plugin :

Je pense que vous devrez apporter quelques modifications à ce fichier. Les valeurs dans le tableau défini par PV_MEMBERPRESS_PRODUCT_IDS devront être définies sur les identifiants d’abonnement de votre site. Vous devrez également définir les définitions PV_DISCOURSE_ENROLLED_GROUP et PV_DISCOURSE_UNENROLLED_GROUP sur des groupes qui existent sur votre site Discourse.

Il semble que le plugin ajoute tous les utilisateurs qui ont un abonnement actif pour l’un de vos produits au PV_DISCOURSE_ENROLLED_GROUP. Si un utilisateur qui avait un ou plusieurs abonnements actifs voit ensuite expirer tous ses abonnements, il sera retiré du PV_DISCOURSE_ENROLLED_GROUP et ajouté au PV_DISCOURSE_UNENROLLED_GROUP.

Peut-être que @fzngagan peut confirmer si c’est correct ? Si c’est le cas, il sera assez simple de configurer le code pour le site de @earlysound. Il est possible que je me méprenne sur le fonctionnement du plugin. Je n’ai pas de copie du plugin Memberpress. Si je pouvais avoir accès à une version de développement de Memberpress, je pourrais le tester moi-même.

1 « J'aime »

Je lis la même logique dans les codes que celle que vous avez expliquée. Ce serait vraiment bien si @fzngagan pouvait confirmer.

Salut tout le monde, je sais que cela fait quelques mois depuis le dernier post, mais j’espère que ce qui suit vous sera toujours utile.

Je ne suis pas @fzngagan bien sûr, mais je suis le client pour lequel ce plugin a été initialement développé !

L’idée est que nous voulions ajouter automatiquement les utilisateurs ayant une adhésion Memberpress récurrente active à un groupe Discourse spécifique.

Lorsque les utilisateurs se désabonnaient et partaient, ils étaient retirés du groupe Discourse et ajoutés à un groupe « Alumni » à la place, qui n’avait accès qu’à certaines zones du forum.

@simon a raison de dire que les identifiants d’adhésion et les groupes Discourse sont codés en dur. Je pense qu’il suffit de les remplacer par les vôtres pour l’utiliser.

Oui, c’est exact. Il vous suffit de modifier ces valeurs

define('PV_MEMBERPRESS_PRODUCT_IDS', array(153, 161));
define('PV_DISCOURSE_ENROLLED_GROUP', 'locker');
define('PV_DISCOURSE_UNENROLLED_GROUP', 'KaizenAlumni');
define('PV_MEPR_ACTIVE_STATUSES', array('complete'));
1 « J'aime »