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 « J'aime »

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 « J'aime »

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.

1 « J'aime »

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.

1 « J'aime »

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.

1 « J'aime »

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.

2 « J'aime »