Wordpress SSO - Restrict Content / user levels / groups

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!