Ich habe sowohl das Discourse-Plugin als auch das Paid Memberships Pro (PMPro)-Plugin sowie das PMPro-Zapier-Add-on verwendet. Ich versuche, das Mitgliedschaftslevel eines Benutzers an Discourse zu aktualisieren.
Ich erwarte, dass sich das Mitgliedschaftslevel, wenn ich es über das wp-admin-Interface eines Benutzers ändere, automatisch im Admin-Bereich der Benutzerverwaltung meiner Discourse-Site aktualisiert.
Was muss ich tun, um dies zu erreichen? Geben Sie mir bitte einige Hinweise dazu.
Du musst eine Aktion zu deiner functions.php hinzufügen
/* Siehe Beispiel unter http://hookr.io/actions/pmpro_after_change_membership_level/ */
do_action( 'pmpro_after_change_membership_level', $level_id, $user_id, $cancel_level );
function action_pmpro_after_change_membership_level( $level_id, $user_id, $cancel_level ) {
. . . . Code, der die Mitgliedschaftsstufe und die Gruppe abruft und sie zur Gruppe hinzufügt
}
Kannst du mir bitte erklären, wie ich die Werte für $level_id, $user_id, $cancel_level und den Gruppennamen für den aktualisierten Benutzer abrufen kann?
Hi Jay, danke für deine Antwort. Es hat bei mir funktioniert, aber der alte Wert ist noch vorhanden. Das heißt, ich habe sowohl den neuen als auch den alten Mitgliedschaftslevel-Wert. Hast du eine Idee, wie man den alten Wert des Mitgliedschaftslevels entfernen kann?
Ich habe dieselbe Funktion verwendet. Bitte helfe mir. Ich habe den Code ebenfalls oben gepostet.
Dies ist mein aktualisierter Code für die Mitgliedschaftsstufe:
function action_pmpro_after_change_membership_level( $level_id, $user_id, $cancel_level ) {
$group_name = dcpmp_get_level_for_id( $level_id );
if ( is_wp_error( $group_name ) ) {
return null;
}
$groupname = DiscourseUtilities::get_discourse_user( $user_id, false );
// Entfernt den Benutzer.
$result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $groupname );
if ( ! empty( $result->success ) ) {
// Entfernt den Metadaten-Schlüssel für die Mitgliedschaftsstufe.
delete_user_meta( $user_id, "dcpmp_group_{$groupname}" );
}
$result1 = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_name );
if ( ! empty( $result1->success ) ) {
// Wenn der Benutzer zur Gruppe hinzugefügt wurde, fügt ein Metadaten-Schlüssel/Wert-Paar hinzu, das später verwendet werden kann.
add_user_meta( $user_id, "dcpmp_group_{$group_name}", 1, true );
}
Dadurch wird $groupname auf ein Discourse-Benutzerobjekt gesetzt. Ich denke, du musst diese Zeile entfernen und stattdessen die Variable $group_name verwenden, die du in der ersten Zeile deines Codes setzt.
Wenn Sie möchten, dass wir Ihnen eine Lösung anbieten, müssen Sie uns bezahlen. Melden Sie sich für einen Hosting-Plan an unter https://discourse.org/buy