I have WP discourse working for SSO and Restrict Content Pro for subscription, signup, but I am wondering how to set up levels during signup … That carry over to discourse?
Are you committed to using Restricted Content Pro? There are quite a few different WordPress membership plugins. My plan is to make a general wp-discourse-groups plugin that will work for most of them, but at the moment I’m making a plugin specifically for the WishList Member plugin. When it’s finished, I think it will do everything that you are looking for.
I’ve written code for some WordPress subscription manager that used API calls to manage groups on WordPress. It shouldn’t be hard to set up WordPress groups that whatever group manager you uses could connect to.
Hola a todos, reactivando este antiguo post porque mi pregunta se aplica a Restrict Content Pro, por lo que es similar a la del autor original. Básicamente, estoy ayudando en un sitio donde el sistema de membresías es Restrict Content Pro y estoy intentando integrar la sincronización de grupos de Discourse para las membresías de pago de RCP; básicamente, cualquier persona con cualquier tipo de membresía debe sincronizarse con el grupo Members en su foro de Discourse.
He pasado mucho tiempo intentando poner en funcionamiento algo similar al ejemplo de Simon Managing Discourse group membership with WP Discourse SSO. Tengo el SSO funcionando bien, pero las membresías aún no se están sincronizando (añadir miembros a un grupo al activarse una membresía con éxito, o eliminar miembros de un grupo al expirar la membresía).
Para este post, solo estoy intentando hacer que funcione la adición de nuevos miembros a un grupo de Discourse. Los foros de Discourse del sitio solo tienen un grupo de Discourse: Members. (Eliminar grupos debería ser lo suficientemente sencillo, ya que el hook de Restrict Content Pro es el mismo, solo hay que sustituir el sufijo active por expired). Restrict Content Pro lista el hook de acción rcp_transition_membership_status_active como desencadenado cada vez que cambia el estado de una membresía. Tiene parámetros para $old_status y $membership_id. La función rcp_get_membership() devuelve un objeto RCP_Membership (que contiene una referencia al $user_id de WordPress, entre otras cosas).
Aquí está la versión más simplificada con la que he llegado:
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
// Añade un usuario al grupo de Discourse 'members'.
function rcpdc_add_member_to_group( $membership_id ) {
$membership = rcp_get_membership( $membership_id );
$user_id = $membership->get_user_id();
DiscourseUtilities::add_user_to_discourse_group( $user_id, 'Members' );
}
// Asegúrate de comprobar que existe la clase Discourse.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
// La acción rcp con el sufijo {active} se ejecuta cada vez que se añade una nueva membresía
add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group' );
}
Si puedes ver algo que esté haciendo obvio mal y que impida que esta acción se ejecute correctamente, agradecería mucho tu ayuda. ¡Gracias!
¡Ups! Tuve un error en el lado de Restrict Content Pro, lo siento. El hook de acción que estoy usando requiere dos argumentos: {“content”:"¡Ups! Tuve un error en el lado de Restrict Content Pro, lo siento. El hook de acción que estoy usando requiere dos argumentos-
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
// Agrega un usuario al grupo de Discourse 'members'.
function rcpdc_add_member_to_group( $old_status, $membership_id ) {
$membership = rcp_get_membership( $membership_id );
$customer = $membership->get_customer();
$user_id = $customer->get_user_id();
DiscourseUtilities::add_user_to_discourse_group( $user_id, 'Members' );
}
// Asegúrate de verificar que la clase Discourse exista. Si no es así y desactivas wp-discourse, esto hará que tu sitio se caiga.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group', 10, 2 );
}
Con el cambio anterior, el add_action debería estar funcionando ahora, pero todavía no tengo éxito con la función add_user_to_discourse_group.
Las membresías recién activadas aún no se están agregando correctamente al grupo Members, así que seguiría agradecido si alguien pudiera ofrecerme algún consejo. Saludos."}
Si es posible, intenta crear un archivo debug.log en tu servidor de WordPress y luego escribir en ese archivo desde tu función rcpdc_add_member_to_group. Puedes usarlo para asegurarte de que la función se está llamando y para verificar que los valores correctos se asignan a las variables que estás creando.
¡Gracias, Simon! Funcionó de maravilla. Logré que el código funcionara. Resulta que el código que envolvía la acción impedía que add_action ejecutara la función. Una vez que eliminé
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
y simplemente incluí el propio add_action, el plugin funcionó correctamente. No me preocupa mucho la verificación, ya que soy la única persona que administra este sitio. Así que sí, ahora la sincronización funciona perfectamente tanto para agregar como para eliminar miembros de los grupos.
Gracias por revisar eso. He añadido una opción al plugin para gestionar los comentarios que se encuentran en categorías privadas. Lamentablemente, no me ha dado tiempo a terminarlo esta semana. La opción se incluirá en la próxima actualización del plugin. Intentaré terminarlo a principios de la próxima semana.