Если я не делаю чего-то неправильно, то запрос к `“/groups/${group_id}/members.json”" кажется довольно неочевидным. Кроме того, он, похоже, не задокументирован и его нельзя увидеть во вкладке Network браузера при отправке формы «Добавить пользователя» на странице группы в Discourse. Опять же, возможно, я что-то делаю не так.
В любом случае, путь для запроса — /groups/${group_id}/members.json, где числовой ID группы подставляется вместо group_id. Тело запроса требует параметра group_id, но этот параметр должен быть установлен в значение name группы. Таким образом, аргументы выглядят примерно так:
$group_id = 45;
$group_name = 'publishers';
$args = array(
'method' => 'DELETE', // или 'PUT'
'body' => array(
// 'group_id' => $group_name, edit: этот параметр не нужен, не помню, что именно я проверял при тестировании.
'usernames' => 'sally,Ben',
)
);
// путь:
/groups/${group_id}/members.json
Если на вашем сайте WordPress установлен плагин WP Discourse, вы можете использовать его статическую вспомогательную функцию discourse_request, чтобы избежать использования curl. Обратите внимание, что я сослался на статическую функцию в файле plugin-utilities, но пространство имён, которое нужно использовать для внешних запросов, находится здесь: 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' для добавления пользователей; 'DELETE' для удаления
$args = array(
'method' => $method,
'body' => array(
// 'group_id' => $group_name, edit: этот параметр не нужен
'usernames' => 'sally,Ben',
)
);
$response = DiscourseUtilities::discourse_request( "/groups/${group_id}/members.json", $args );
// верните, запишите в лог или обработайте ответ
}
Если WordPress используется как провайдер SSO для Discourse, существует вспомогательная функция, позволяющая добавить одного пользователя в одну или несколько групп:
function zalg_sso_add_users_to_group() {
$user_id = 1; // ID пользователя в WordPress
$group_names = 'foo,bar,baz'; // одно или несколько названий групп, разделённых запятыми, без пробелов после запятых!
DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}
Чтобы добавить нескольких пользователей в одну группу, вам всё равно придётся использовать метод discourse_request, показанный в первом примере кода.