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
}
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?
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 );
}
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.