WPのメンバーシップステータスに基づいたユーザーの停止/再開

WP サブスクリプションの有効期限が切れた、またはキャンセルされた際に Discourse ユーザーを停止(suspend)し、以前に期限切れとなったサブスクリプションが更新された際にユーザーの停止を解除する方法について、ガイダンスを求めています。

WP は SSO プロバイダーです。当サイトは現在、@simon 氏の dcpmp コードを使用していますが、PMPro から WooCommerce + WC Subscriptions + WC Memberships へ移行予定です。

この場合、dcpmp のユーザーをグループに追加/削除する機能は不要です。

WC Subscriptions 参照:
Subscriptions Action Reference Documentation - WooCommerce
Introduction to Subscriptions Developer Documentation Documentation - WooCommerce
https://prospress.github.io/subscriptions-rest-api-docs/

WordPress Membership Integration (Private Forum) with Discourse をご覧になりましたか?そこには手順が詳しく説明されていると思います。

その方法はありますが、Discourse 上でユーザーを停止(サスペンド)しないため、メールで投稿が届いたり、その方法でフォーラムとやり取りしたりすることが可能です。

ああ、なるほど。プラグインにユーザーを停止する機能があるようには見えませんが(どこを見ればよいかわからない可能性もあります)。最悪のケースとして、サブスクリプションの失敗時に呼び出されるフックに API 呼び出しを追加し、ユーザーを停止させることができます。これは Reverse engineer the Discourse API を使って確認できます。

ユーザーの停止と停止解除は比較的簡単です。難しいのは、どの WooCommerce アクションにフックするかを特定することです。

woocommerce_subscription_status_updated アクションが機能するようです。このフックには 3 つのパラメータが渡されます:$subscription$new_status$old_status です。ステータスパラメータは文字列なので、その値は非常に分かりやすいはずです。$subscription パラメータは WC_Subscription オブジェクトです。これには、サブスクリプションが関連付けられているユーザー ID を特定できる詳細情報が含まれていると推測されますが、確認するためには実際に確認する必要があります。

おそらくこれらです:
Subscriptions Action Reference Documentation - WooCommerce


アクション: 'woocommerce_subscription_status_active'

パラメータ: $subscription 直前にステータスが変更されたサブスクリプションを表す WC_Subscription オブジェクト。

説明: このアクションは、$subscription で指定されたサブスクリプションのステータスがアクティブに変更された後にトリガーされます。サブスクリプションのステータスは、保留からアクティブ、一時停止からアクティブ、または他のカスタムステータスからアクティブに遷移した可能性があります。


アクション: 'woocommerce_subscription_status_cancelled'

パラメータ: $subscription 直前にステータスが変更されたサブスクリプションを表す WC_Subscription オブジェクト。

説明: このアクションは、$subscription で指定されたサブスクリプションのステータスが変更された後にトリガーされます。

サブスクリプションのステータスは、保留からキャンセル、一時停止からキャンセル、キャンセル待ちからキャンセル、または他のカスタムステータスからキャンセルに遷移した可能性があります。


アクション: 'woocommerce_subscription_status_expired'

パラメータ: $subscription 直前にステータスが変更されたサブスクリプションを表す WC_Subscription オブジェクト。

説明: サブスクリプション製品を購入時に期間が設定されている場合、またはサブスクリプションに終了日が設定されている場合に、サブスクリプションの期間が満了したときにトリガーされます。

実際にいくつかテストを実行して、どのような形式か確認してみます。