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.

こんにちは、皆さん。この古い投稿を復活させさせていただきます。私の質問は Restrict Content Pro に適用されるため、元の投稿者(OP)のケースと類似しています。基本的に、私はメンバーシップシステムが Restrict Content Pro のサイトのサポートを行っており、有料の RCP メンバーシップに対応した Discourse グループ同期を実装しようとしています。具体的には、あらゆるメンバーシップを持つユーザーを、Discourse フォーラムの Members グループに同期させたいと考えています。

Simon の Managing Discourse group membership with WP Discourse SSO のような例を実行状態にするために、多くの時間を費やしてきました。SSO は正常に機能していますが、メンバーシップの同期(メンバーシップ有効化時にグループにユーザーを追加、またはメンバーシップ期限切れ時にグループからユーザーを削除)は依然として機能していません。

今回の投稿では、新しいメンバーを Discourse グループに追加する機能の実装に焦点を当てています。このサイトの Discourse フォーラムには Members という 1 つのグループしか存在しません。(グループからの削除も、Restrict Content Pro のフックが同じであるため、active サフィックスを expired に置き換えるだけで簡単に実装できるはずです。)Restrict Content Pro は、メンバーシップのステータスが変更されるたびに発火する rcp_transition_membership_status_active アクションフックをリストしています。このフックには $old_status と $membership_id のパラメータがあります。rcp_get_membership() を実行すると、RCP_Membership オブジェクトが返されます(これには、WordPress の $user_id への参照などが含まれています)。

以下が、私が作成した最も単純化されたバージョンです:


use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// ユーザーを 'members' Discourse グループに追加します。
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' );
}

// Discourse クラスが存在することを確認してください。
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
    // {active} で終わる rcp アクションは、新しいメンバーシップが追加されるたびに実行されます
    add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group' );
}

このアクションが正しく実行されない原因となる、明らかな間違いがあればご指摘いただければ幸いです。お手伝いいただければ大変助かります。ありがとうございます!

おっと!Restrict Content Pro 側でエラーが発生してしまいました。申し訳ありません。私が使用しているアクションフックには 2 つの引数が必要です。

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// ユーザーを 'members' の Discourse グループに追加します。
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' );
}

// Discourse クラスが存在することを確認してください。存在しない場合、wp-discourse を無効化するとサイトがクラッシュします。
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
    add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group', 10, 2 );
}

上記の変更により、add_action は現在機能するはずですが、add_user_to_discourse_group 関数についてはまだ成功していません。

新しく有効化されたメンバーシップがまだ Members グループに正常に追加されていないため、どなたかアドバイスいただければ幸いです。よろしくお願いいたします。

可能であれば、WordPress サーバー上に debug.log ファイルを作成し、rcpdc_add_member_to_group 関数からそのファイルに書き込むようにしてください。これにより、関数が呼び出されているか確認し、作成している変数に正しい値が割り当てられているかを確認できます。

デバッグについては、通常、以下のページで説明されているアプローチを使用しています:Debugging in WordPress – Advanced Administration Handbook | Developer.WordPress.org ファイルを手動で作成し、wp-content ディレクトリに追加する必要があります。

ありがとう、Simon!見事に解決しました。コードが動作するようになりました。実は、アクションをラップしていたコードが add_action による関数の実行を妨げていたのです。以下の

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

というチェックを削除し、add_action 自体だけを含めるようにしたところ、プラグインが正常に動作するようになりました。このチェックについてはあまり気にしていません。このサイトの管理者は私一人だけですから。というわけで、現在はグループへのメンバー追加と削除の両方について、同期が完璧に機能しています。

迅速かつ有益な返信をいただき、改めてありがとうございます。

ご確認いただきありがとうございます。プライベートカテゴリにあるコメントに対応する機能をプラグインに追加する予定です。残念ながら今週中に完了させる時間が取れませんでした。このオプションはプラグインの次回のアップデートで追加されます。来週初めには完了できるよう努めます。