Aggiorna il livello di membership con pmpro e wp-discourse

Ho utilizzato sia il plugin Discourse che PMPro, nonché l’addon Zapier di PMPro. Sto cercando di aggiornare il livello di membership di un utente su Discourse.
Mi aspetto che, quando modifico il livello di membership di un utente tramite wp-admin, tale modifica venga aggiornata automaticamente nella sezione amministratori del mio sito Discourse.
Cosa devo fare per ottenere questo? Potete darmi qualche idea?

Dovrai aggiungere un’azione al tuo file functions.php

/* vedi l'esempio su 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 ) {

 . . . . codice che recupera il livello di membership e il gruppo e li aggiunge al gruppo

}

Puoi per favore spiegare come ottenere $level_id, $user_id, $cancel_level e il nome del gruppo per l’utente aggiornato?

Ho collegato la documentazione. Credo che vengano passati tramite l’hook dell’azione.

Ciao Jay, grazie per la risposta. Ha funzionato per me, ma il vecchio valore è ancora presente. Cioè, ho entrambi i valori: il nuovo livello di membership e quello vecchio. Hai qualche idea su come rimuovere il vecchio valore del livello di membership?

Sto utilizzando quanto segue:

DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );

Questa è la mia funzione di rimozione:

function dcpmp_remove_member_from_group( $level_id, $user_id, $cancel_level ) {
    if ( ! empty( $cancel_level ) ) {
        $group_name = dcpmp_get_level_for_id( $cancel_level );
        if ( is_wp_error( $group_name ) ) {

            return null;
        }

        // Rimuove l'utente.
        $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );
        if ( ! empty( $result->success ) ) {
           // Rimuove la chiave dei metadati del livello di membership.
            delete_user_meta( $user_id, "dcpmp_group_{$group_name}" );
        }

        return $result;
    }

    return null;
}

Penso che in wp-discourse ci sia una funzione per rimuovere dal gruppo che puoi chiamare.

questa è la stessa funzione utilizzata da [Simon Cossar] (https://meta.discourse.org/u/Simon_Cossar)team consulta questo link

Manage group membership in Discourse with WP Discourse SSO

ho usato la stessa funzione, ho bisogno di aiuto. Ho pubblicato anche il codice, vedi il messaggio sopra
Questa è la mia funzione di aggiornamento del livello di membership
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 );

	// Rimuove l'utente.
    $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $groupname );
    if ( ! empty( $result->success ) ) {
       // Rimuove la chiave dei metadati del livello di membership.
        delete_user_meta( $user_id, "dcpmp_group_{$groupname}" );
    }
    
    $result1 = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_name );

    if ( ! empty( $result1->success ) ) {

        // Se l'utente è stato aggiunto al gruppo, aggiungi una coppia chiave/valore dei metadati che potrà essere utilizzata in seguito.
        add_user_meta( $user_id, "dcpmp_group_{$group_name}", 1, true );
    }

return $result;
return $result1;

}
add_action( ‘pmpro_after_change_membership_level’, ‘action_pmpro_after_change_membership_level’, 10, 3 );

Non sono sicuro di cosa faccia questa riga nel tuo codice:

$groupname = DiscourseUtilities::get_discourse_user( $user_id, false );

Questo assegna a $groupname un oggetto utente di Discourse. Penso che tu debba rimuovere quella riga e usare la variabile $group_name che stai impostando nella prima riga del tuo codice.

L’ho già usato prima, ma non funziona.
Per favore, forniscimi una soluzione.

Se desideri che ti forniamo una soluzione, dovrai pagare. Iscriviti a un piano di hosting su https://discourse.org/buy