WP 멤버십 상태에 따라 사용자 정지/해제

다음과 같은 작업을 수행하는 방법에 대한 안내가 필요합니다:

  • WP 구독이 만료되거나 취소될 때 discourse 사용자를 정지(suspend)하고,
  • 이전에 만료된 구독이 갱신될 때 discourse 사용자의 정지를 해제(unsuspend)하는 것.

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 액션이 작동할 것으로 보입니다. 이 훅은 세 가지 매개변수를 전달합니다: $subscription, $new_status, $old_status. 상태 매개변수는 문자열이므로 그 값은 비교적 자명할 것입니다. $subscription 매개변수는 WC_Subscription 객체입니다. 이 객체에는 구독이 연결된 사용자 ID를 찾을 수 있는 세부 정보가 포함되어 있을 것으로 추정됩니다. 다만 확인을 위해 직접 살펴봐야 할 것 같습니다.

아마도 이 내용들이 도움이 될 것입니다:
Subscriptions Action Reference Documentation - WooCommerce


액션: 'woocommerce_subscription_status_active'

매개변수: $subscription 방금 상태가 변경된 구독을 나타내는 WC_Subscription 객체입니다.

설명: $subscription으로 지정된 구독의 상태가 활성화(activated)로 변경된 후에 이 액션이 트리거됩니다. 구독의 상태는 대기(pending)에서 활성(active)로, 보류(on-hold)에서 활성으로, 또는 기타 사용자 정의 상태에서 활성으로 전환되었을 수 있습니다.


액션: 'woocommerce_subscription_status_cancelled'

매개변수: $subscription 방금 상태가 변경된 구독을 나타내는 WC_Subscription 객체입니다.

설명: $subscription으로 지정된 구독의 상태가 변경된 후에 이 액션이 트리거됩니다.

구독의 상태는 대기에서 취소(cancelled)로, 보류에서 취소로, 취소 대기(pending cancellation)에서 취소로, 또는 기타 사용자 정의 상태에서 취소로 전환되었을 수 있습니다.


액션: 'woocommerce_subscription_status_expired'

매개변수: $subscription 방금 상태가 변경된 구독을 나타내는 WC_Subscription 객체입니다.

설명: 구독이 기간을 마감했을 때 트리거됩니다. 구독 제품 구매 시 기간이 설정되었거나, 구독에 종료 날짜가 별도로 설정된 경우 해당됩니다.

테스트를 실행해 보겠습니다. 어떤 형태인지 확인해 볼게요.