cURLリクエストの問題は何ですか?

私が何か間違ったことをしていない限り、"/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 メソッドを引き続き使用する必要があります。

「いいね!」 3