В чём проблема с моим запросом cURL?

Если я не делаю чего-то неправильно, то запрос к `“/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, показанный в первом примере кода.