Приостановка/возобновление пользователя на основе статуса членства в WP

Мне нужна консультация по следующим вопросам:

  • как приостанавливать учётную запись пользователя Discourse при истечении срока действия подписки в WP или её отмене, и
  • как снимать блокировку с учётной записи пользователя при продлении ранее истёкшей подписки.

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. Я предполагаю, что он содержит данные, позволяющие найти идентификатор пользователя, с которым связана подписка. Однако, чтобы подтвердить это, мне нужно будет заглянуть в код.

Возможно, эти:
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, представляющий подписку, статус которой только что был изменён.

Описание: Вызывается, когда подписка достигает конца своего срока действия, если при покупке продукта подписки был установлен её срок или если для подписки была задана дата окончания.

Я попробую провести несколько тестов, чтобы посмотреть, как они выглядят.