Memberpress + WP Discourse (Gruppenverwaltung)

Ich habe jahrelang in den Meta-Discourse-Foren mitgelesen, Schnipsel gesammelt und gelernt, wie ich eine Client-Website, die WordPress + Memberpress + Discourse (selbst gehostet) verwendet, verbessern kann.

Ich musste (und muss immer noch) Discourse-Gruppen basierend auf Memberpress-Mitgliedschaften zuweisen.

Als Referenz:

Früher (seit einigen Jahren) habe ich die add_filter( 'wpdc_sso_params' Filter-Methode verwendet:

Der Nachteil schien zu sein, dass sich die Discourse-Gruppen nur beim Einloggen des Benutzers aktualisierten. Ich wollte etwas, das eine unmittelbarere Wirkung hat (zum Beispiel, wenn eine Memberpress-Transaktion stattfindet).

Zugegebenermaßen sind meine PHP-Programmierkenntnisse recht grundlegend. Ich bin eher ein Frontend-HTML/CSS-Entwickler.

Jetzt habe ich meine Funktionen für die Client-Website mit einer besseren WP-Discourse-Funktion neu geschrieben, die hier beschrieben wird:

Diese verwendet die Funktionen: \\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group und: \\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group.

Jetzt kann ich Memberpress-Ereignisse abhören und die Discourse-Gruppen mit diesem Codeblock (functions.php) hinzufügen:

add_action('mepr-event-create', 'listen_to_mepr_events');
function listen_to_mepr_events($event) {
  $obj = $event->get_data();
  //$obj könnte ein MeprTransaction-Objekt oder ein MeprSubscription-Objekt sein

  if(!($obj instanceof MeprTransaction) && !($obj instanceof MeprSubscription)) {
    return; // hier gibt es nichts zu tun, wenn wir es nicht mit einer Transaktion oder einem Abonnement zu tun haben
  }

  $member = $obj->user(); // Mitgliedsobjektdaten aus dem Ereignisobjekt abrufen

  $user_id = $member->ID; // Benutzer-ID aus dem Objekt abrufen

  if($member->is_active_on_membership($obj)) { //aktive Mitgliedschaft
    
    if(3780 == $obj->product_id) { // MONATLICHES Abonnement
        $add_group = 'Ksenia_Basic'; // Discourse-Gruppenname
        $remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
        // zu Discourse-Gruppe hinzufügen
        \\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group( $user_id, $add_group );
        // aus Discourse-Gruppen entfernen
        \\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
    }
    else if(3847 == $obj->product_id) { // 6-monatiges (Essential) Abonnement
        $add_group = 'Ksenia_Essential'; // Discourse-Gruppenname
        $remove_groups = ['Ksenia_Basic','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
        // zu Discourse-Gruppe hinzufügen
        \\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group( $user_id, $add_group );
        // aus Discourse-Gruppen entfernen
        \\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
    }
  }
  else { //keine Übereinstimmungen
  }
}

Zusätzliche Referenz: Der Memberpress Action Hook add_action('mepr-event-create', 'listen_to_mepr_events'); kann hier gefunden werden:

Zu Ihrer Information - Dies ist eine vereinfachte Version dessen, was ich auf der Website meines Kunden verwende. Die vollständige Version (die Learndash + Mailster-Verwaltung einschließt) finden Sie hier: Memberpress + Learndash + Mailster + WP Discourse · GitHub

Vielen Dank an alle in diesem Forum, die über die Jahre hinweg Code-Schnipsel und Unterstützung geleistet haben. Ich weiß, dass es viele Mitleser wie mich gibt, für die dies eine äußerst wertvolle und hilfreiche Ressource ist.

Wenn Sie Vorschläge haben oder Probleme mit meinem Beispiel sehen, lassen Sie mich bitte wissen, wie ich es verbessern kann.

6 „Gefällt mir“

Danke Andrew, ich werde mir das morgen ansehen und Ihnen am Montag eine detailliertere Antwort geben. Haben Sie sich als erste Anmerkung das von @fzngagan entwickelte Memberpress Group Sync Plugin angesehen?

4 „Gefällt mir“

Rollenbasiert - nett :sunglasses: Nein, dieses Plugin hatte ich noch nicht gesehen. Ausgezeichneter Beitrag.

1 „Gefällt mir“

Wie würde ich das implementieren? Ich benutze Wordpress mit Memberpress und habe gerade Discourse auf einer Subdomain installiert, die auf einem DigitalOcean Droplet gehostet wird. Lade ich den Code buchstäblich hoch, so wie ich es bei einem Plugin tun würde?

Ja, wp-discourse-mepr-sync ist nur ein Ein-Datei-Wordpress-Plugin.

1 „Gefällt mir“

Ich habe mir gerade den Code angesehen. Falls es nicht klar ist, das Memberpress Sync Plugin hängt vom Code des WP Discourse Plugins ab: WP Discourse – WordPress plugin | WordPress.org. Das bedeutet, dass Sie auch das WP Discourse Plugin installieren, aktivieren und konfigurieren müssen: Connect WP Discourse to Discourse. Sie müssen auch Ihre WordPress-Site als DiscourseConnect-Anbieter für Ihre Discourse-Site konfigurieren. Details zur Einrichtung finden Sie hier: Configure single sign-on (SSO) with WP Discourse and DiscourseConnect.

Es gibt etwas im Memberpress Sync Plugin, bei dem ich mir nicht sicher bin. Es sieht so aus, als ob zwei Memberpress-Produkt-IDs und zwei Discourse-Gruppen fest im Code des Plugins codiert sind:

Ich denke, dass Sie einige Änderungen an dieser Datei vornehmen müssen. Die Werte im Array, das von PV_MEMBERPRESS_PRODUCT_IDS definiert wird, müssen auf die Abonnement-IDs Ihrer Website gesetzt werden. Sie müssen auch die Definitionen PV_DISCOURSE_ENROLLED_GROUP und PV_DISCOURSE_UNENROLLED_GROUP auf Gruppen setzen, die auf Ihrer Discourse-Site existieren.

Es scheint, dass das Plugin alle Benutzer, die ein aktives Abonnement für eines Ihrer Produkte haben, zur PV_DISCOURSE_ENROLLED_GROUP hinzufügt. Wenn ein Benutzer, der ein oder mehrere aktive Abonnements hatte, alle seine Abonnements verliert, wird er aus der PV_DISCOURSE_ENROLLED_GROUP entfernt und zur PV_DISCOURSE_UNENROLLED_GROUP hinzugefügt.

Vielleicht kann @fzngagan bestätigen, ob das korrekt ist? Wenn ja, wird es ziemlich einfach sein, den Code für die Website von @earlysound einzurichten. Es ist jedoch möglich, dass ich missverstehe, wie das Plugin funktioniert. Ich habe keine Kopie des Memberpress-Plugins. Wenn ich Zugriff auf eine Entwicklerversion von Memberpress erhalten könnte, könnte ich es selbst testen.

1 „Gefällt mir“

Ich lese die gleiche Logik aus dem Code, wie Sie sie erklärt haben. Es wäre wirklich schön, wenn @fzngagan das bestätigen könnte.

Hallo Leute, ich weiß, es ist ein paar Monate her seit dem letzten Beitrag, aber hoffentlich ist das Folgende trotzdem hilfreich.

Ich bin natürlich nicht @fzngagan, aber ich bin der Kunde, für den dieses Plugin ursprünglich entwickelt wurde!

Die Idee war, dass wir Benutzer mit einer aktiven wiederkehrenden Memberpress-Mitgliedschaft automatisch einer bestimmten Discourse-Gruppe hinzufügen wollten.

Wenn sich Benutzer abmeldeten und gingen, wurden sie aus der Discourse-Gruppe entfernt und stattdessen einer „Alumni“-Gruppe hinzugefügt, die nur Zugang zu bestimmten Bereichen des Forums hatte.

@simon hat Recht, dass die Mitgliedschafts-IDs und Discourse-Gruppen fest einprogrammiert sind. Ich glaube, es sollte nur eine Frage des Austauschs gegen Ihre eigenen sein, um es zu verwenden.

Ja, das stimmt. Sie müssten nur diese Werte ändern

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 „Gefällt mir“