長年、meta.discourse フォーラムを閲覧し、スニペットを収集して、Wordpress + Memberpress + Discourse (セルフホスト) を使用しているクライアントサイトを改善する方法を学んできました。
Memberpress のメンバーシップに基づいて Discourse グループを割り当てる必要がありました (そして、今でも必要です)。
参考:
- クライアントサイト (SSO プロバイダー): https://secretsofsolo.com/
- Discourse サイト: https://jamcircle.secretsofsolo.com/
以前 (数年間) は、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
長年にわたり、このフォーラムでスニペットやサポートを提供してくれたすべての人に感謝します。私のような多くの閲覧者が、これを非常に価値があり役立つリソースだと感じていることを知っています。
提案がある場合や、私の例に問題が見つかった場合は、改善方法を教えてください。