Adicionando automaticamente novos usuários (da integração WP) a um grupo

Peço desculpas se isso já foi perguntado antes, mas estou procurando uma maneira de adicionar automaticamente os usuários que foram cadastrados via integração com o WP (SSO) a um determinado grupo de usuários.

Não consegui encontrar nenhuma documentação sobre como fazer isso, então qualquer orientação seria muito apreciada :slight_smile:

Fiquem bem e até breve,

Alex

Estou assumindo que você está usando o plugin WP Discourse para SSO. Esse plugin possui algumas funções que podem ser usadas para gerenciar a associação a grupos no Discourse. Confira Manage group membership in Discourse with WP Discourse SSO para obter detalhes sobre como usar essas funções. Pretendo atualizar esse tópico em breve para adicionar um exemplo mais geral. Avise-me se houver algo no tópico que não esteja claro.

Oi, Simon – sim, está correto. Estou usando o plugin WP Discourse. Obrigado por linkar este tópico; ficarei de olho na atualização. Mas, se for útil, o caso específico envolve o WooCommerce Memberships e Subscriptions. Dito isso, pretendo limitar os registros de usuários apenas a membros pagantes de qualquer forma, então, desde que seja um exemplo geral que possa adicionar cada novo membro a um grupo que chamo de everybody (apenas para contexto, o objetivo aqui é simplesmente facilitar a mensageria e a marcação de membros em anúncios).

Tudo de bom e falamos em breve!

Sim, esse é o exemplo que está faltando no tópico ao qual fiz referência. Você pode adicionar usuários a um grupo como parte do processo de login SSO usando o parâmetro SSO add_groups. Por padrão, o plugin WP Discourse não envia esse parâmetro junto com a carga útil SSO, mas o plugin possui um filtro que pode ser usado para adicionar esse parâmetro à carga útil SSO.

O código a seguir, adicionado ao arquivo functions.php do seu tema ou a um plugin, deve funcionar para você. Dessa forma, você pode adicionar usuários a vários grupos. O parâmetro add_groups aceita uma lista de nomes de grupos separada por vírgulas (sem espaços antes ou depois das vírgulas):

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params' );
function wpdc_custom_sso_params( $params ) {
    $params['add_groups'] = 'seu_nome_de_grupo'; 

    return $params;
}

Se você quiser adicionar apenas usuários específicos ao grupo, pode chamar a função assim:

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params', 10, 2 );
function wpdc_custom_sso_params( $params, $user ) {
    if (/*adicione uma condição aqui para verificar se o usuário deve ser adicionado ao grupo */) {        
        $params['add_groups'] = 'seu_nome_de_grupo'; 
    }

    return $params;
}

Você também pode remover usuários de grupos com o parâmetro SSO remove_groups.

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params' );
function wpdc_custom_sso_params( $params ) {
    $params['remove_groups'] = 'seu_nome_de_grupo'; 

    return $params;
}

ou

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params', 10, 2 );
function wpdc_custom_sso_params( $params, $user ) {
    if (/*adicione uma condição aqui para verificar se o usuário deve ser removido do grupo */) {        
        $params['remove_groups'] = 'seu_nome_de_grupo'; 
    }

    return $params;
}

A principal desvantagem dessa abordagem, em comparação ao uso da função add_user_to_discourse_group que referenciei, é que ela exige que usuários existentes saiam e façam login novamente no Discourse para que suas associações a grupos sejam atualizadas.

Incrível, obrigado, Simon! Por curiosidade, seria muito difícil incluir um exemplo para o WooCommerce Memberships?

Seria muito útil se ele também removesse automaticamente as pessoas do grupo quando não houvesse mais uma assinatura ativa do WooCommerce e as adicionasse ao grupo apenas quando houvesse — assim, nenhuma revisão manual seria necessária e tudo ficaria completamente automatizado (quando planos são cancelados e reativados, etc.). Isso porque as permissões no Discourse podem ser limitadas para permitir que apenas pessoas com assinatura ativa (e que estejam no grupo ao qual isso as adiciona) visualizem ou postem…

Qualquer orientação que eu possa repassar a um desenvolvedor para que isso seja implementado seria super útil.

Atenciosamente,

Alex

Deve ser possível remover automaticamente os usuários de um grupo do Discourse quando a assinatura deles no WooCommerce expirar. Para fazer isso, você usaria a função remove_user_from_discourse_group que eu vinculei.

Não estou familiarizado o suficiente com o plugin WooCommerce Memberships & Subscriptions para saber quais gatilhos de ação são chamados quando uma assinatura é criada ou cancelada. Talvez outros membros da comunidade Meta saibam como fazer isso. Você também pode criar um tópico na nossa categoria Marketplace para encontrar um desenvolvedor que ajude com isso.

Tudo ótimo, obrigado por isso, Simon. Vou verificar e ver se consigo contratar um desenvolvedor com experiência em Discourse (e repassarei isso a ele). Falando nisso – por curiosidade, você tem uma lista de especialistas confiáveis que possa recomendar para esse tipo de trabalho?

Não tenho uma lista de membros deste fórum que realizem integrações entre WordPress e Discourse. Teria interesse em saber quais desenvolvedores da comunidade Meta estão interessados em trabalhar com WordPress/Discourse.

Não recebi relatos negativos sobre membros da comunidade relacionados a integrações com WordPress. Se você contratar um desenvolvedor com histórico na comunidade, deve estar seguro. Estou sempre disposto a responder perguntas relacionadas à criação de integrações sobre o plugin WP Discourse. Desenvolvedores podem me enviar mensagens se tiverem dificuldades com qualquer coisa.

Ótimo, imagino que entrarei em contato em algum momento! Talvez acabe agrupando todas essas alterações em um pequeno complemento/extensão para o plugin WP Discourse, vamos ver. :slight_smile: