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

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

こんにちは、皆さん。この古い投稿を復活させさせていただきます。私の質問は 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 グループに正常に追加されていないため、どなたかアドバイスいただければ幸いです。よろしくお願いいたします。

「いいね!」 1

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

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

「いいね!」 1

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

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

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

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

「いいね!」 1

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

「いいね!」 2