Actualizar nivel de membresía con pmpro y wp-discourse

He utilizado los plugins Discourse y PMPro, además del complemento de Zapier para PMPro. Estoy intentando actualizar el nivel de membresía de mis usuarios en Discourse.

Espero que al cambiar el nivel de membresía de cualquier usuario desde wp-admin, este cambio se refleje automáticamente en la sección de administración de usuarios de mi sitio de Discourse.

¿Qué necesito hacer para lograr esto? ¿Puedes darme algunas ideas al respecto?

Necesitarás agregar una acción a tu archivo functions.php

/* ver el ejemplo en 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 ) {

 . . . . código que obtiene el nivel de membresía y el grupo, y los agrega al grupo

}

¿Podrías explicar cómo puedo obtener $level_id, $user_id, $cancel_level y el nombre del grupo para el usuario actualizado?

He enlazado a la documentación. Creo que se pasan mediante el gancho de acción.

Hola Jay, gracias por tu respuesta. Funcionó para mí, pero el valor antiguo sigue ahí. Es decir, tengo ambos valores: el nivel de membresía nuevo y el antiguo. ¿Tienes alguna idea sobre cómo eliminar el valor antiguo del nivel de membresía?

Estoy usando lo siguiente:

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

Esta es mi función de eliminación:

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

        // Elimina al usuario.
        $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );
        if ( ! empty( $result->success ) ) {
           // Elimina la clave de metadatos del nivel de membresía.
            delete_user_meta( $user_id, "dcpmp_group_{$group_name}" );
        }

        return $result;
    }

    return null;
}

Creo que hay una función de eliminación de grupo en wp-discourse que puedes llamar.

esta es la misma función utilizada por [Simon Cossar] (https://meta.discourse.org/u/Simon_Cossar)equipo consulta este enlace

Manage group membership in Discourse with WP Discourse SSO

he utilizado la misma función, necesito ayuda. También he publicado el código, consulta el mensaje anterior.
Este es mi código de actualización de nivel de membresía:
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 );

	// Elimina al usuario.
    $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $groupname );
    if ( ! empty( $result->success ) ) {
       // Elimina la clave de metadatos del nivel de membresía.
        delete_user_meta( $user_id, "dcpmp_group_{$groupname}" );
    }
    
    $result1 = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_name );

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

        // Si el usuario ha sido añadido al grupo, añade un par clave/valor de metadatos que se pueda utilizar más adelante.
        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 );

No estoy seguro de qué hace esta línea en tu código:

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

Eso asignará a $groupname un objeto de usuario de Discourse. Creo que necesitas eliminar esa línea y usar la variable $group_name que estás estableciendo en la primera línea de tu código.

Ya lo he usado antes pero no funciona
por favor, proporcióneme una solución

Si deseas que te proporcionemos una solución, necesitarás pagarnos. Regístrate en un plan de alojamiento en https://discourse.org/buy