Wordpress SSO - Restrict Content / user levels / groups

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!