Wordpress SSO - Restrict Content / user levels / groups

AI-generated summary

The discussion is about integrating WordPress Single Sign-On (SSO) with Restrict Content Pro to manage user levels and groups in Discourse.

tomobrien wants to know how to set up levels during signup, which would carry over to Discourse, while simon is working on a plugin to achieve this functionality.

Later, deere joins the discussion, looking for help with integrating Restrict Content Pro with Discourse to sync paid memberships to a specific group. They share their code, which simon helps debug by suggesting the use of a debug.log file.

After debugging, deere discovers that the issue was with the code wrapped around the action and resolves it by removing the class_exists check. The plugin now works fine for adding and removing members from groups.

simon mentions that an upcoming plugin update will include an option for dealing with comments in private categories.

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.

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.

Salut à tous, je remonte ce vieux post car ma question concerne Restrict Content Pro, elle est donc similaire à celle de l’auteur original. En gros, j’aide à gérer un site dont le système d’adhésion est Restrict Content Pro, et j’essaie d’intégrer la synchronisation des groupes Discourse pour les adhésions payantes RCP : fondamentalement, toute personne ayant une adhésion doit être synchronisée avec le groupe Members sur son forum Discourse.

J’ai passé beaucoup de temps à essayer de faire fonctionner quelque chose comme l’exemple de Simon, Gérer l’appartenance aux groupes Discourse avec WP Discourse SSO. Le SSO fonctionne bien, mais les adhésions ne sont toujours pas synchronisées (ajout des membres à un groupe lors de l’activation réussie d’une adhésion, ou suppression des membres d’un groupe à l’expiration de l’adhésion).

Pour ce post, j’essaie simplement de faire fonctionner l’ajout de nouveaux membres à un groupe Discourse. Le forum Discourse du site n’a qu’un seul groupe Discourse : Members. (La suppression des groupes devrait être assez simple, car le hook Restrict Content Pro est le même, il suffit de remplacer le suffixe active par expired. Restrict Content Pro liste le hook d’action rcp_transition_membership_status_active comme se déclenchant à chaque changement de statut d’une adhésion. Il possède des paramètres pour $old_status et $membership_id. L’exécution de rcp_get_membership() renvoie un objet RCP_Membership (qui contient, entre autres, une référence à l’ID utilisateur WordPress).

Voici la version la plus simplifiée à laquelle je suis parvenu :


use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// Ajoute un utilisateur au groupe Discourse 'members'.
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' );
}

// Assurez-vous de vérifier que la classe Discourse existe.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
    // L'action rcp suffixée par {active} se déclenche à chaque nouvelle adhésion
    add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group' );
}

Si vous voyez quelque chose que j’évidemment fais de travers et qui empêche cette action de s’exécuter correctement, je vous serais très reconnaissant de votre aide. Merci !

Oups ! J’ai rencontré une erreur côté Restrict Content Pro, désolé. Le crochet d’action que j’utilise nécessite deux arguments :

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// Ajoute un utilisateur au groupe Discourse 'members'.
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' );
}

// Assurez-vous de vérifier que la classe Discourse existe. Sinon, si vous désactivez wp-discourse, cela fera planter votre site.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
    add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group', 10, 2 );
}

Avec le changement ci-dessus, l’appel add_action devrait maintenant fonctionner, mais je n’obtiens toujours aucun succès avec la fonction add_user_to_discourse_group.

Les adhésions nouvellement activées ne sont toujours pas ajoutées au groupe Members avec succès, donc j’aimerais toujours beaucoup que quelqu’un puisse me donner des conseils. Salutations.

Si possible, essayez de créer un fichier debug.log sur votre serveur WordPress, puis écrivez dedans depuis votre fonction rcpdc_add_member_to_group. Cela vous permettra de vérifier que la fonction est bien appelée et que les bonnes valeurs sont attribuées aux variables que vous créez.

Pour le débogage, j’utilise généralement l’approche décrite ici : Debugging in WordPress – Advanced Administration Handbook | Developer.WordPress.org. Vous devez créer manuellement le fichier debug.log et l’ajouter à votre répertoire wp-content.

Merci, Simon ! Ça a parfaitement fonctionné. J’ai réussi à faire marcher le code. Il s’avérait que le code enveloppant l’action empêchait add_action d’exécuter la fonction. Une fois que j’ai supprimé le bloc :

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

et que j’ai simplement inclus l’appel à add_action lui-même, le plugin a fonctionné sans problème. Je ne m’inquiète pas vraiment de cette vérification, car je suis la seule personne à administrer ce site. Donc, maintenant, la synchronisation fonctionne parfaitement aussi bien pour l’ajout que pour la suppression de membres dans les groupes.

Encore merci pour votre réponse rapide et utile.

Merci d’avoir examiné cela. J’ai ajouté une option au plugin pour gérer les commentaires situés dans des catégories privées. Malheureusement, je n’ai pas eu le temps de finaliser cela cette semaine. Cette option sera incluse dans la prochaine mise à jour du plugin. Je ferai de mon mieux pour le réaliser début la semaine prochaine.