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.
Oi pessoal, estou ressuscitando este tópico antigo, porque minha pergunta se aplica ao Restrict Content Pro, então é semelhante à do autor original. Basicamente, estou ajudando em um site onde o sistema de membros é o Restrict Content Pro e estou tentando integrar a sincronização de grupos do Discourse para assinaturas pagas do RCP — basicamente, qualquer pessoa com qualquer tipo de assinatura precisa ser sincronizada com o grupo Members no fórum Discourse.
Tenho passado muito tempo tentando fazer algo como o exemplo de Simon, Gerenciando a associação a grupos do Discourse com o WP Discourse SSO, funcionar. O SSO está funcionando bem, mas as assinaturas ainda não estão sendo sincronizadas (adicionar membros a um grupo na ativação bem-sucedida da assinatura ou remover membros do grupo ao expirar a assinatura).
Para este post, estou apenas tentando fazer com que a adição de novos membros a um grupo do Discourse funcione. Os fóruns Discourse do site têm apenas um grupo — Members. (Remover grupos deve ser simples, já que o hook do Restrict Content Pro é o mesmo — basta substituir o sufixo active por expired). O Restrict Content Pro lista o hook de ação rcp_transition_membership_status_active como sendo acionado sempre que o status de uma assinatura muda. Ele possui parâmetros para $old_status e $membership_id. A função rcp_get_membership() retorna um objeto RCP_Membership (que contém uma referência ao $user_id do WordPress, entre outras coisas).
Aqui está a versão mais simplificada que consegui:
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
// Adiciona um usuário ao grupo 'Members' do Discourse.
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' );
}
// Certifique-se de verificar se a classe Discourse existe.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
// A ação rcp com o sufixo {active} é executada sempre que uma nova assinatura é adicionada
add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group' );
}
Se você puder identificar algo óbvio que estou fazendo de errado e que esteja impedindo que essa ação funcione corretamente, ficaria muito grato pela ajuda. Obrigado!
Ops! Houve um erro no lado do Restrict Content Pro, desculpe. O hook de ação que estou usando requer dois argumentos-
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
// Adiciona um usuário ao grupo 'members' do Discourse.
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' );
}
// Certifique-se de verificar se a classe Discourse existe. Caso contrário, se você desativar o wp-discourse, isso irá travar seu site.
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
add_action( 'rcp_transition_membership_status_active', 'rcpdc_add_member_to_group', 10, 2 );
}
Com a alteração acima, o add_action deve estar funcionando agora, mas ainda não tenho nenhum sucesso com a função add_user_to_discourse_group.
Membros recém-ativados ainda não estão sendo adicionados ao grupo Members com sucesso, então ainda adoraria se alguém pudesse me dar algum conselho. Abraços.
Se possível, tente criar um arquivo debug.log no seu servidor WordPress e, em seguida, escrever nesse arquivo a partir da sua função rcpdc_add_member_to_group. Você pode usá-lo para garantir que a função está sendo chamada e para verificar se os valores corretos estão sendo atribuídos às variáveis que você está criando.
Obrigado, Simon! Funcionou perfeitamente. Consegui fazer o código funcionar. Acontece que o código envolvido na ação estava impedindo o add_action de executar a função. Assim que removi o
if ( class_exists( '\WPDiscourse\Discourse\Discourse' ) ) {
e incluí apenas o próprio add_action, o plugin funcionou normalmente. Não me preocupo muito com a verificação, pois sou a única pessoa que administra este site. Então, sim, agora a sincronização funciona perfeitamente tanto para adicionar quanto para remover membros dos grupos.
Obrigado novamente pela sua resposta rápida e útil.
Obrigado por verificar isso. Adicionei uma opção ao plugin para lidar com comentários em categorias privadas. Infelizmente, não consegui finalizar isso esta semana. A opção será incluída na próxima atualização do plugin. Vou tentar concluí-la no início da próxima semana.