A meno che non stia facendo qualcosa di sbagliato, la richiesta a "/groups/${group_id}/members.json" è piuttosto poco intuitiva. Inoltre, non sembra essere documentata e non può essere visualizzata nella scheda di rete del browser quando si invia il modulo “Aggiungi utente” di Discourse nella pagina di un gruppo. Di nuovo, potrei star facendo qualcosa di sbagliato.
In ogni caso, il percorso per la richiesta è /groups/${group_id}/members.json, con l’ID numerico del gruppo sostituito a group_id. Il corpo della richiesta richiede un parametro group_id, ma tale parametro deve essere impostato sul name del gruppo. Quindi gli argomenti diventano qualcosa del genere:
$group_id = 45;
$group_name = 'publishers';
$args = array(
'method' => 'DELETE', // o 'PUT'
'body' => array(
// 'group_id' => $group_name, edit: questo parametro non è necessario, non sono sicuro di cosa stesse succedendo quando lo stavo testando.
'usernames' => 'sally,Ben',
)
);
// percorso:
/groups/${group_id}/members.json
Se hai il plugin WP Discourse configurato sul tuo sito WordPress, puoi utilizzare la sua funzione di utilità statica discourse_request per evitare di dover usare curl. Nota che ho collegato la funzione statica che si trova nel file plugin-utilities, ma il namespace che devi usare per le richieste esterne proviene da 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' per aggiungere utenti; 'DELETE' per rimuovere utenti
$args = array(
'method' => $method,
'body' => array(
// 'group_id' => $group_name, edit: questo parametro non è necessario
'usernames' => 'sally,Ben',
)
);
$response = DiscourseUtilities::discourse_request( "/groups/${group_id}/members.json", $args );
// restituisci, registra o gestisci la risposta
}
Se stai usando WordPress come provider SSO per Discourse, c’è una funzione di utilità che ti permette di aggiungere un utente a uno o più gruppi:
function zalg_sso_add_users_to_group() {
$user_id = 1; // l'ID utente di WordPress
$group_names = 'foo,bar,baz'; // uno o più nomi di gruppo separati da virgole, senza spazi dopo le virgole!
DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}
Per aggiungere più utenti a un singolo gruppo, dovrai comunque utilizzare il metodo discourse_request presente nel primo esempio di codice.