Memberpress + WP Discourse(グループ管理)

長年、meta.discourse フォーラムを閲覧し、スニペットを収集して、Wordpress + Memberpress + Discourse (セルフホスト) を使用しているクライアントサイトを改善する方法を学んできました。

Memberpress のメンバーシップに基づいて Discourse グループを割り当てる必要がありました (そして、今でも必要です)。

参考:

以前 (数年間) は、add_filter( 'wpdc_sso_params' フィルターメソッドを使用していました:

欠点は、Discourse グループがユーザーログイン時にのみ更新されるように見えたことでした。私は、より即時的な効果 (たとえば、Memberpress のトランザクションが発生したとき) を持つものを望んでいました。

確かに、私の PHP コーディングスキルは非常に基本的なものです。私は主にフロントエンドの HTML/CSS 開発者です。

現在、ここで説明されているより優れた WP Discourse 関数を使用して、クライアントサイトの関数を書き直しました。

これには、\\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group および \\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group 関数が使用されています。

これで、Memberpress イベントをリッスンし、Discourse グループを (functions.php) のこのコードブロックで追加できます:

add_action('mepr-event-create', 'listen_to_mepr_events');
function listen_to_mepr_events($event) {
  $obj = $event->get_data();
  //$obj は MeprTransaction オブジェクトまたは MeprSubscription オブジェクトの可能性があります

  if(!($obj instanceof MeprTransaction) && !($obj instanceof MeprSubscription)) {
    return; // txn または sub を扱っていない場合は、ここで何もすることはありません
  }

  $member = $obj->user(); // イベントオブジェクトからメンバーオブジェクトデータを取得

  $user_id = $member->ID; // オブジェクトからユーザー ID を取得

  if($member->is_active_on_membership($obj)) { //アクティブなメンバーシップ

    if(3780 == $obj->product_id) { //MONTHLY Membership
        $add_group = 'Ksenia_Basic'; // Discourse グループ名
        $remove_groups = ['Ksenia_Essential','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
        // Discourse グループに追加
        \\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group( $user_id, $add_group );
        // Discourse グループから削除
        \\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
    }
    else if(3847 == $obj->product_id) { //6 Month (Essential) Membership
        $add_group = 'Ksenia_Essential'; // Discourse グループ名
        $remove_groups = ['Ksenia_Basic','Ksenia_Premium','Ksenia_Free','Ksenia_Annual'];
        // Discourse グループに追加
        \\WPDiscourse\\Utilities\\Utilities::add_user_to_discourse_group( $user_id, $add_group );
        // Discourse グループから削除
        \\WPDiscourse\\Utilities\\Utilities::remove_user_from_discourse_group( $user_id, $remove_groups );
    }
  }
  else { //一致なし
  }
}

追加の参考情報: Memberpress のアクションフック add_action('mepr-event-create', 'listen_to_mepr_events'); の例はここで見つけることができます。

参考までに、これはクライアントサイトで使用しているものの簡略版です。完全版 (Learndash + Mailster 管理が含まれています) はここで見つけることができます: Memberpress + Learndash + Mailster + WP Discourse · GitHub

長年にわたり、このフォーラムでスニペットやサポートを提供してくれたすべての人に感謝します。私のような多くの閲覧者が、これを非常に価値があり役立つリソースだと感じていることを知っています。

提案がある場合や、私の例に問題が見つかった場合は、改善方法を教えてください。

「いいね!」 6

アンドリューさん、ありがとうございます。明日確認し、月曜日に詳細な回答をさせていただきます。まず、@fzngagan 氏が開発したMemberpressグループ同期プラグインをご覧になりましたか?

「いいね!」 4

ロールベース - いいですね :sunglasses: いいえ、そのプラグインは見ていませんでした。素晴らしい貢献です。

「いいね!」 1

これをどのように実装すればよいですか?WordPressでMemberpressを使用しており、DigitalOceanのドロップレットでホストされているサブドメインにDiscourseをインストールしたばかりです。プラグインのようにコードをアップロードするのですか?

はい、wp-discourse-mepr-sync は単一ファイルのWordPressプラグインです。

「いいね!」 1

コードを確認しましたが、不明な点があれば、Memberpress Sync プラグインは WP Discourse プラグインのコードに依存していることをお知らせします: WP Discourse – WordPress plugin | WordPress.org Discourse プラグインもインストール、有効化、設定する必要があります: https://meta.discourse.org/t/connect-wp-discourse-to-discourse/223490。また、WordPress サイトを Discourse サイトの DiscourseConnect プロバイダーとして設定する必要があります。設定方法の詳細はこちらです: https://meta.discourse.org/t/wp-discourse-and-discourseconnect/223494。

Memberpress Sync プラグインには、よくわからない点があります。プラグインのコードに 2 つの Memberpress Product ID と 2 つの Discourse グループがハードコーディングされているように見えます:

そのファイルに変更を加える必要があると思います。PV_MEMBERPRESS_PRODUCT_IDS で定義されている配列の値は、サイトのサブスクリプション ID に設定する必要があります。また、PV_DISCOURSE_ENROLLED_GROUPPV_DISCOURSE_UNENROLLED_GROUP の定義を、Discourse サイトに存在するグループに設定する必要があります。

プラグインは、アクティブなサブスクリプションを持つユーザーを PV_DISCOURSE_ENROLLED_GROUP に追加するようです。もし、1 つ以上のサブスクリプションがアクティブだったユーザーが、すべてのサブスクリプションを失効させた場合、そのユーザーは PV_DISCOURSE_ENROLLED_GROUP から削除され、PV_DISCOURSE_UNENROLLED_GROUP に追加されます。

これは正しいか、@fzngagan さんに確認していただけますか?もしそうであれば、@earlysound さんのサイトのコード設定は比較的簡単になります。ただし、プラグインの動作を誤解している可能性もあります。Memberpress プラグインを持っていないのです。開発版の Memberpress にアクセスできれば、自分でテストできます。

「いいね!」 1

コードから、あなたが説明したのと同じロジックを読み取っています。@fzngagan さんが確認していただけると、本当に助かります。

皆さん、こんにちは。前回の投稿から数ヶ月経ちましたが、以下の内容はまだ役立つことを願っています。

もちろん、私は@fzngaganではありませんが、このプラグインが元々開発されたクライアントです!

アイデアは、アクティブな継続的Memberpressメンバーシップを持つユーザーを特定のDiscourseグループに自動的に追加することでした。

ユーザーが購読を解除して退会した場合、Discourseグループから削除され、「Alumni」グループに追加され、フォーラムの特定のエリアのみにアクセスできるようになりました。

@simonが指摘しているように、メンバーシップIDとDiscourseグループはハードコーディングされています。使用するには、ご自身のIDとグループに置き換えるだけでよいはずです。

はい、その通りです。これらの値を変更するだけで済みます。

define('PV_MEMBERPRESS_PRODUCT_IDS', array(153, 161));
define('PV_DISCOURSE_ENROLLED_GROUP', 'locker');
define('PV_DISCOURSE_UNENROLLED_GROUP', 'KaizenAlumni');
define('PV_MEPR_ACTIVE_STATUSES', array('complete'));
「いいね!」 1