Wordpress SSO - Restrict Content / user levels / groups

I have WP discourse working for SSO and Restrict Content Pro for subscription, signup, but I am wondering how to set up levels during signup … That carry over to discourse?

Eg reader level 1, contributor level 2, moderator, level 3

So Signup through Wordpress, and level affects group in Discourse?

Are you committed to using Restricted Content Pro? There are quite a few different WordPress membership plugins. My plan is to make a general wp-discourse-groups plugin that will work for most of them, but at the moment I’m making a plugin specifically for the WishList Member plugin. When it’s finished, I think it will do everything that you are looking for.

4 „Gefällt mir“

Thats great! I am opening to using any of them. Keep us posted! : )

Is there no way to do this with current WP Discourse setup?

I’ve written code for some WordPress subscription manager that used API calls to manage groups on WordPress. It shouldn’t be hard to set up WordPress groups that whatever group manager you uses could connect to.

1 „Gefällt mir“

Hallo zusammen, ich belebe diesen alten Beitrag wieder, da meine Frage auf Restrict Content Pro zutrifft und somit der Frage des Originalbeitrags ähnlich ist. Grundsätzlich unterstütze ich eine Website, deren Mitgliedschaftssystem Restrict Content Pro ist, und versuche, die Discourse-Gruppensynchronisierung für bezahlte RCP-Mitgliedschaften zu integrieren – im Grunde muss jeder mit einer beliebigen Mitgliedschaft in der Discourse-Forum-Gruppe Members synchronisiert werden.

Ich habe viel Zeit damit verbracht, etwas wie Simons Beispiel Managing Discourse group membership with WP Discourse SSO zum Laufen zu bringen. Die SSO funktioniert einwandfrei, aber die Mitgliedschaften werden immer noch nicht synchronisiert (also Mitglieder bei erfolgreicher Aktivierung einer Mitgliedschaft zu einer Gruppe hinzufügen oder bei Ablauf einer Mitgliedschaft aus einer Gruppe entfernen).

In diesem Beitrag versuche ich zunächst nur, das Hinzufügen neuer Mitglieder zu einer Discourse-Gruppe zum Laufen zu bringen. Die Discourse-Foren der Website verfügen nur über eine einzige Discourse-Gruppe – Members. (Das Entfernen von Gruppen sollte einfach genug sein, da der Restrict Content Pro-Hook derselbe ist, wobei lediglich das Suffix active durch expired ersetzt wird.) Restrict Content Pro listet den Action-Hook rcp_transition_membership_status_active auf, der ausgelöst wird, sobald sich der Status einer Mitgliedschaft ändert. Er hat Parameter für $old_status und $membership_id. Die Funktion rcp_get_membership() gibt ein RCP_Membership-Objekt zurück (das unter anderem einen Verweis auf die WordPress-$user_id enthält).

Hier ist die stark vereinfachte Version, die ich entwickelt habe:


use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// Fügt einen Benutzer zur Discourse-Gruppe 'members' hinzu.
function rcpdc_add_member_to_group( $membership_id ) {
    $membership = rcp_get_membership( $membership_id );
    $user_id = $membership->get_user_id();
    DiscourseUtilities::add_user_to_discourse_group( $user_id, 'Members' );
}

// Stellen Sie sicher, dass die Discourse-Klasse existiert.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
    // rcp-Aktion mit dem Suffix {active} wird ausgeführt, sobald eine neue Mitgliedschaft hinzugefügt wird
    add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group' );
}

Wenn Sie etwas erkennen, das ich offensichtlich falsch mache und das verhindert, dass diese Aktion ordnungsgemäß ausgeführt wird, wäre ich Ihnen für Hilfe sehr dankbar. Danke!

Hoppla! Ich hatte einen Fehler auf der Seite von Restrict Content Pro, sorry. Der von mir verwendete Action-Hook benötigt zwei Argumente-

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// Fügt einen Benutzer zur Discourse-Gruppe 'members' hinzu.
function rcpdc_add_member_to_group( $old_status, $membership_id ) {
    $membership = rcp_get_membership( $membership_id );
    $customer = $membership->get_customer();
    $user_id = $customer->get_user_id();
    DiscourseUtilities::add_user_to_discourse_group( $user_id, 'Members' );
}

// Stellen Sie sicher, dass die Discourse-Klasse existiert. Wenn nicht und Sie wp-discourse deaktivieren, stürzt Ihre Website ab.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
    add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group', 10, 2 );
}

Mit der oben genannten Änderung sollte add_action jetzt funktionieren, aber ich habe immer noch keinen Erfolg mit der Funktion add_user_to_discourse_group.

Neu aktivierte Mitgliedschaften werden weiterhin nicht erfolgreich zur Gruppe Members hinzugefügt, daher wäre ich dankbar, wenn mir jemand einen Rat geben könnte. Cheers.

1 „Gefällt mir“

Falls möglich, erstellen Sie auf Ihrem WordPress-Server eine Datei namens debug.log und schreiben Sie aus Ihrer Funktion rcpdc_add_member_to_group in diese Datei. So können Sie überprüfen, ob die Funktion aufgerufen wird und ob den von Ihnen erstellten Variablen die korrekten Werte zugewiesen werden.

Für das Debugging verwende ich normalerweise den Ansatz, der hier beschrieben wird: Debugging in WordPress – Advanced Administration Handbook | Developer.WordPress.org. Sie müssen die Datei debug.log manuell erstellen und im Verzeichnis wp-content ablegen.

1 „Gefällt mir“

Danke, Simon! Das hat wunderbar funktioniert. Ich habe den Code zum Laufen gebracht. Es stellte sich heraus, dass der Code, der die Aktion umschloss, verhinderte, dass add_action die Funktion ausführt. Sobald ich den folgenden Block entfernt habe

if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {

und nur noch das add_action selbst enthalten habe, funktionierte das Plugin einwandfrei. Ich mache mir wegen der Prüfung keine großen Sorgen, da ich der einzige Administrator dieser Seite bin. Also ja, jetzt funktioniert die Synchronisierung sowohl beim Hinzufügen als auch beim Entfernen von Mitgliedern aus Gruppen einwandfrei.

Nochmals vielen Dank für deine schnelle und hilfreiche Antwort.

1 „Gefällt mir“

Danke, dass du dir das angesehen hast. Ich habe eine Option für das Plugin hinzugefügt, um mit Kommentaren in privaten Kategorien umzugehen. Leider habe ich diese Woche nicht mehr genug Zeit gehabt, das fertigzustellen. Die Option wird im nächsten Update des Plugins hinzugefügt. Ich werde versuchen, das Anfang nächster Woche zu erledigen.

2 „Gefällt mir“