根据 WP 会员状态暂停/恢复用户

我正在寻找关于如何实现以下功能的指导:

  • 当 WordPress 订阅到期或被取消时,暂停 Discourse 用户;
  • 当之前到期的订阅重新激活时,解除对 Discourse 用户的暂停。

WordPress 是 SSO 提供者。我的网站一直使用 @simondcpmp 代码,但我打算从 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 指定的订阅状态变更为“激活”后触发。订阅状态可能从“待处理”转为“激活”,或从“暂停”转为“激活”,或从其他自定义状态转为“激活”。


操作: 'woocommerce_subscription_status_cancelled'

参数: $subscription 一个 WC_Subscription 对象,代表刚刚更改状态的订阅。

说明: 此操作在 $subscription 指定的订阅状态变更后触发。

订阅状态可能从“待处理”转为“已取消”,或从“暂停”转为“已取消”,或从“待取消”转为“已取消”,或从其他自定义状态转为“已取消”。


操作: 'woocommerce_subscription_status_expired'

参数: $subscription 一个 WC_Subscription 对象,代表刚刚更改状态的订阅。

说明: 当订阅达到其期限结束时触发,前提是在购买订阅产品时设置了期限长度,或者在订阅上设置了其他结束日期。

我会尝试运行一些测试,看看它们是什么样的。