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:
- Die Client-Website (SSO-Anbieter): https://secretsofsolo.com/
- Die Discourse-Website: https://jamcircle.secretsofsolo.com/
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.