Benutzer basierend auf dem WP-Mitgliedschaftsstatus sperren/freigeben

Ich suche nach einer Anleitung, wie ich:

  • den Discourse-Benutzer suspendieren kann, wenn das WP-Abonnement abläuft oder storniert wird, und
  • den Discourse-Benutzer wieder entsperren kann, wenn das zuvor abgelaufene Abonnement erneuert wird.

WP ist der SSO-Anbieter. Meine Seite hat bisher den Code von @simon dcpmp verwendet, aber ich werde von PMPro auf WooCommerce + WC Subscriptions + WC Memberships umsteigen.

Die Teile von dcpmp, die den Benutzer zu einer Gruppe hinzufügen oder daraus entfernen, sind in diesem Fall nicht erforderlich.

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

Hast du dir WordPress Membership Integration (Private Forum) with Discourse? schon angesehen? Ich bin mir ziemlich sicher, dass es dich Schritt für Schritt durch den Prozess führt.

Ich habe das versucht, aber diese Methode suspendiert den Benutzer in Discourse nicht, was bedeutet, dass er weiterhin Beiträge per E-Mail erhält und auf diese Weise mit dem Forum interagieren kann.

Oh, verstehe. Ich sehe nicht, dass das Plugin eine Funktion zum Sperren eines Benutzers hat (vielleicht weiß ich nur nicht, wo ich suchen muss). Im schlimmsten Fall könntest du einen API-Aufruf zum Hook hinzufügen, der aufgerufen wird, wenn das Abonnement fehlschlägt, und diesen so konfigurieren, dass er den Benutzer sperrt. Du findest die相关信息 unter Reverse engineer the Discourse API

Das Suspendieren und Aufheben der Suspendierung von Benutzern wird der einfache Teil sein. Der Trick besteht darin, herauszufinden, an welche WooCommerce-Aktionen man andocken muss.

Es sieht so aus, als ob die Aktion woocommerce_subscription_status_updated funktionieren sollte. Dieser Hook übergibt drei Parameter: $subscription, $new_status und $old_status. Die Status-Parameter sind Strings, daher sollte ihr Wert ziemlich selbsterklärend sein. Der Parameter $subscription ist ein WC_Subscription-Objekt. Ich gehe davon aus, dass es Details enthält, mit denen Sie die Benutzer-ID finden können, die mit dem Abonnement verknüpft ist. Das müsste ich jedoch zur Bestätigung noch einmal genauer ansehen.

Vielleicht diese:
Subscriptions Action Reference Documentation - WooCommerce


Aktion: 'woocommerce_subscription_status_active'

Parameter: $subscription Ein WC_Subscription -Objekt, das die Subscription darstellt, deren Status soeben geändert wurde.

Beschreibung: Diese Aktion wird ausgelöst, nachdem die mit $subscription angegebene Subscription in den Status „aktiv“ geändert wurde. Der Status der Subscription kann von „ausstehend“ zu „aktiv“, von „pausiert“ zu „aktiv“ oder von einem anderen benutzerdefinierten Status zu „aktiv“ gewechselt sein.


Aktion: 'woocommerce_subscription_status_cancelled'

Parameter: $subscription Ein WC_Subscription -Objekt, das die Subscription darstellt, deren Status soeben geändert wurde.

Beschreibung: Diese Aktion wird ausgelöst, nachdem die mit $subscription angegebene Subscription ihren Status geändert hat.

Der Status der Subscription kann von „ausstehend“ zu „storniert“, von „pausiert“ zu „storniert“, von „Stornierung ausstehend“ zu „storniert“ oder von einem anderen benutzerdefinierten Status zu „storniert“ gewechselt sein.


Aktion: 'woocommerce_subscription_status_expired'

Parameter: $subscription Ein WC_Subscription -Objekt, das die Subscription darstellt, deren Status soeben geändert wurde.

Beschreibung: Wird ausgelöst, wenn eine Subscription das Ende ihrer Laufzeit erreicht, sofern beim Kauf des Subscription-Produkts eine Laufzeit festgelegt wurde oder anderweitig ein Enddatum für die Subscription gesetzt wurde.

Ich werde einige Tests durchführen, um zu sehen, wie diese aussehen.