Mettre à jour le niveau d'adhésion avec pmPro et wp-discourse

J’ai utilisé Discourse et PMPro, ainsi que l’extension Zapier de PMPro. J’essaie de mettre à jour le niveau d’adhésion de mon utilisateur sur Discourse.

Je m’attends à ce que, lorsque je modifie le niveau d’adhésion d’un utilisateur via wp-admin, cela soit également mis à jour dans la section des utilisateurs administrateurs de mon site Discourse.

Alors, que dois-je faire pour y parvenir ? Donnez-moi quelques pistes.

Vous devrez ajouter une action à votre fichier functions.php

/* voir l'exemple sur 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 qui récupère le niveau d'adhésion et le groupe, puis les ajoute au groupe

}

Pourriez-vous s’il vous plaît expliquer comment obtenir $level_id, $user_id, $cancel_level et le nom du groupe pour l’utilisateur mis à jour ?

J’ai lié à la documentation. Je pense qu’elles sont transmises via le crochet d’action.

Salut Jay, merci pour ta réponse, ça a fonctionné de mon côté, mais l’ancienne valeur est toujours présente. Cela signifie que j’ai les deux valeurs : le nouveau niveau d’adhésion et l’ancien niveau d’adhésion. As-tu une idée pour supprimer l’ancienne valeur du niveau d’adhésion ?

J’utilise ce qui suit :

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

Voici ma fonction de suppression :

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;
        }

        // Supprime l'utilisateur.
        $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );
        if ( ! empty( $result->success ) ) {
           // Supprime la clé de métadonnées du niveau d'adhésion.
            delete_user_meta( $user_id, "dcpmp_group_{$group_name}" );
        }

        return $result;
    }

    return null;
}

Je pense qu’il existe une fonction de suppression d’un groupe dans wp-discourse que vous pouvez appeler.

Ceci est la même fonction utilisée par [Simon Cossar] (https://meta.discourse.org/u/Simon_Cossar)équipe. Consultez ce lien :

Manage group membership in Discourse with WP Discourse SSO

J’ai utilisé la même fonction et j’ai besoin d’aide. J’ai également publié le code, veuillez consulter le message ci-dessus.
Voici mon code de mise à jour du niveau d’appartenance :
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 );

	// Supprime l'utilisateur.
    $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $groupname );
    if ( ! empty( $result->success ) ) {
       // Supprime la clé de métadonnées du niveau d'appartenance.
        delete_user_meta( $user_id, "dcpmp_group_{$groupname}" );
    }
    
    $result1 = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_name );

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

        // Si l'utilisateur a été ajouté au groupe, ajoutez une paire clé/valeur de métadonnées qui pourra être utilisée ultérieurement.
        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 );

Je ne suis pas sûr de ce que fait cette ligne dans votre code :

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

Cela affectera un objet utilisateur Discourse à $groupname. Je pense que vous devez supprimer cette ligne et utiliser la variable $group_name que vous définissez dans la première ligne de votre code.

Je l’ai déjà utilisé, mais cela ne fonctionne pas.
Veuillez me fournir une solution.

Si vous souhaitez que nous vous fournissions une solution, vous devrez nous payer. Inscrivez-vous à un plan d’hébergement sur https://discourse.org/buy