Wenn ich nichts falsch mache, ist die Anfrage an \"/groups/${group_id}/members.json\" irgendwie unintuitiv. Sie scheint auch nicht dokumentiert zu sein und kann nicht im Netzwerk-Tab des Browsers eingesehen werden, wenn das Discourse-Formular “Benutzer hinzufügen” auf der Gruppenseite abgeschickt wird. Auch hier könnte ich etwas falsch machen.
Auf jeden Fall ist der Pfad für die Anfrage /groups/${group_id}/members.json, wobei die numerische ID der Gruppe für group_id eingesetzt wird. Der Body der Anfrage benötigt einen group_id-Parameter, aber dieser Parameter muss auf den name der Gruppe gesetzt werden. Die Argumente sehen dann etwa so aus:
$group_id = 45;
$group_name = 'publishers';
$args = array(
'method' => 'DELETE', // oder 'PUT'
'body' => array(
// 'group_id' => $group_name, edit: dieser Parameter wird nicht benötigt, ich bin mir nicht sicher, was los war, als ich ihn getestet habe.
'usernames' => 'sally,Ben',
)
);
// Pfad:
/groups/${group_id}/members.json
Wenn Sie das WP Discourse-Plugin auf Ihrer WordPress-Site konfiguriert haben, können Sie seine statische discourse_request-Hilfsfunktion verwenden, um die Verwendung von curl zu vermeiden. Beachten Sie, dass ich auf die statische Funktion im plugin-utilities-File verlinkt habe, aber der Namespace, den Sie für externe Anfragen verwenden müssen, stammt von 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' zum Hinzufügen von Benutzern; 'DELETE' zum Entfernen von Benutzern
$args = array(
'method' => $method,
'body' => array(
// 'group_id' => $group_name, edit: dieser Parameter wird nicht benötigt
'usernames' => 'sally,Ben',
)
);
$response = DiscourseUtilities::discourse_request( "/groups/${group_id}/members.json", $args );
// die Antwort zurückgeben, protokollieren oder verarbeiten
}
Wenn Sie WordPress als SSO-Provider für Discourse verwenden, gibt es eine Hilfsfunktion, mit der Sie einen Benutzer zu einer oder mehreren Gruppen hinzufügen können:
function zalg_sso_add_users_to_group() {
$user_id = 1; // die WordPress-Benutzer-ID des Benutzers
$group_names = 'foo,bar,baz'; // ein oder mehrere durch Kommas getrennte Gruppennamen, ohne Leerzeichen nach den Kommas!
DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}
Um mehrere Benutzer zu einer einzigen Gruppe hinzuzufügen, müssten Sie immer noch die discourse_request-Methode verwenden, die im ersten Codebeispiel enthalten ist.