A menos que eu esteja fazendo algo errado, a solicitação para \"/groups/${group_id}/members.json\" é um tanto contraintuitiva. Ela também não parece estar documentada e não pode ser visualizada na aba de rede do navegador ao enviar o formulário “Adicionar Usuário” do Discourse na página de um grupo. Novamente, posso estar fazendo algo errado.
De qualquer forma, o caminho para a solicitação é /groups/${group_id}/members.json, com o ID numérico do grupo substituído por group_id. O corpo da solicitação requer um parâmetro group_id, mas esse parâmetro precisa ser definido como o name do grupo. Assim, os argumentos ficam assim:
$group_id = 45;
$group_name = 'publishers';
$args = array(
'method' => 'DELETE', // ou 'PUT'
'body' => array(
// 'group_id' => $group_name, editar: este parâmetro não é necessário, não tenho certeza do que estava acontecendo quando o testei.
'usernames' => 'sally,Ben',
)
);
// caminho:
/groups/${group_id}/members.json
Se você tiver o plugin WP Discourse configurado em seu site WordPress, pode usar sua função auxiliar estática discourse_request para evitar ter que usar curl. Note que eu linkei para a função estática que está no arquivo plugin-utilities, mas o namespace que você precisa usar para solicitações externas é de https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php.
use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;
function zalg_add_users_to_group() {
$group_id = 45;
$group_name = 'publishers';
$method = 'PUT'; // 'PUT' para adicionar usuários; 'DELETE' para remover usuários
$args = array(
'method' => $method,
'body' => array(
// 'group_id' => $group_name, editar: este parâmetro não é necessário
'usernames' => 'sally,Ben',
)
);
$response = DiscourseUtilities::discourse_request( "/groups/${group_id}/members.json", $args );
// retornar, registrar ou lidar com a resposta
}
Se você estiver usando o WordPress como provedor de SSO para o Discourse, há uma função auxiliar que permite adicionar um usuário a um ou mais grupos:
function zalg_sso_add_users_to_group() {
$user_id = 1; // o ID do usuário do WordPress
$group_names = 'foo,bar,baz'; // um ou mais nomes de grupo separados por vírgula, sem espaços após as vírgulas!
DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}
Para adicionar vários usuários a um único grupo, você ainda precisará usar o método discourse_request que está no primeiro exemplo de código.