Wordpress SSO - Restrict Content / user levels / groups

こんにちは、皆さん。この古い投稿を復活させさせていただきます。私の質問は 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' );
}

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