Suspender/reativar usuário com base no status de associação do WP

Estou procurando orientações sobre como:

  • suspender o usuário do Discourse quando a assinatura do WP expirar ou for cancelada, e
  • reativar o usuário do Discourse quando a assinatura anteriormente expirada for renovada.

O WP é o provedor de SSO. Meu site tem utilizado o código dcpmp de @simon, mas vou migrar do PMPro para WooCommerce + WC Subscriptions + WC Memberships.

As partes do dcpmp que adicionam/removem o usuário de um grupo não são necessárias neste caso.

Referências do WC Subscriptions:
Subscriptions Action Reference Documentation - WooCommerce
Introduction to Subscriptions Developer Documentation Documentation - WooCommerce
https://prospress.github.io/subscriptions-rest-api-docs/

Você já deu uma olhada em WordPress Membership Integration (Private Forum) with Discourse? Tenho quase certeza de que o post explica tudo passo a passo.

Eu já tentei, mas esse método não suspende o usuário no Discourse, o que significa que ele ainda receberá posts por e-mail e poderá interagir no fórum dessa maneira.

Ah, entendi. Não vejo que o plugin tenha uma função para suspender o usuário (mas pode ser que eu não saiba onde procurar). O pior que você pode fazer é adicionar uma chamada de API ao hook que é acionado quando a assinatura falha e fazê-lo suspender o usuário. Você pode encontrá-lo usando Reverse engineer the Discourse API

Suspender e reativar usuários será a parte fácil. O truque é descobrir em quais ações do WooCommerce integrar.

Parece que a ação woocommerce_subscription_status_updated deve funcionar. Esse hook passa três parâmetros: $subscription, $new_status e $old_status. Os parâmetros de status são strings, então seus valores devem ser bastante autoexplicativos. O parâmetro $subscription é um objeto WC_Subscription. Estou assumindo que ele contém detalhes que permitem encontrar o ID do usuário associado à assinatura. Mas precisaria dar uma olhada para confirmar.

Talvez estes:
Subscriptions Action Reference Documentation - WooCommerce


Ação: 'woocommerce_subscription_status_active'

Parâmetros: $subscription Um objeto WC_Subscription que representa a assinatura cujo status acabou de ser alterado.

Descrição: Esta ação é acionada após a assinatura especificada por $subscription ter seu status alterado para ativado. O status da assinatura pode ter transitado de pendente para ativo, de em espera para ativo ou de algum outro status personalizado para ativo.


Ação: 'woocommerce_subscription_status_cancelled'

Parâmetros: $subscription Um objeto WC_Subscription que representa a assinatura cujo status acabou de ser alterado.

Descrição: Esta ação é acionada após a assinatura especificada por $subscription ter seu status alterado.

O status da assinatura pode ter transitado de pendente para cancelado, de em espera para cancelado, de pendente de cancelamento para cancelado ou de algum outro status personalizado para cancelado.


Ação: 'woocommerce_subscription_status_expired'

Parâmetros: $subscription Um objeto WC_Subscription que representa a assinatura cujo status acabou de ser alterado.

Descrição: Acionada quando uma assinatura atinge o fim de seu período, caso um prazo tenha sido definido no produto da assinatura no momento da compra ou uma data de término tenha sido definida de outra forma na assinatura.

Vou tentar executar alguns testes para ver como eles se apresentam.