私が何か間違ったことをしていない限り、"/groups/${group_id}/members.json" へのリクエストは少し直感的ではありません。また、ドキュメント化されておらず、Discourse のグループページの「ユーザーの追加」フォームを送信する際にブラウザのネットワークタブで表示することもできません。繰り返しになりますが、私が何か間違っている可能性があります。
いずれにせよ、リクエストのパスは /groups/${group_id}/members.json で、group_id はグループの数値 ID に置き換えられます。 リクエストの本文には group_id パラメータが必要ですが、そのパラメータはグループの name に設定する必要があります。したがって、引数は次のようになります。
$group_id = 45;
$group_name = 'publishers';
$args = array(
'method' => 'DELETE', // または 'PUT'
'body' => array(
// 'group_id' => $group_name, 編集: このパラメータは不要です。テスト中に何が起こっていたのかわかりません。
'usernames' => 'sally,Ben',
)
);
// パス:
/groups/${group_id}/members.json
WordPress Discourse プラグインを WordPress サイトに設定している場合は、その静的な 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, 編集: このパラメータは不要です
'usernames' => 'sally,Ben',
)
);
$response = DiscourseUtilities::discourse_request( "/groups/${group_id}/members.json", $args );
// レスポンスを返す、ログに記録する、または処理する
}
WordPress を Discourse の SSO プロバイダーとして使用している場合、1 人のユーザーを 1 つ以上のグループに追加できるヘルパー関数があります。
function zalg_sso_add_users_to_group() {
$user_id = 1; // ユーザーの WordPress ユーザー ID
$group_names = 'foo,bar,baz'; // 1 つ以上のカンマ区切りのグループ名。カンマの後にスペースは不要!
DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}
複数のユーザーを 1 つのグループに追加するには、最初のコード例にある discourse_request メソッドを引き続き使用する必要があります。