제 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 사이트에 WP Discourse 플러그인이 구성되어 있다면, curl을 사용할 필요가 없도록 정적 discourse_request 헬퍼 함수를 사용할 수 있습니다. 참고로 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 제공자로 사용 중이라면, _한 명_의 사용자를 하나 이상의 그룹에 추가할 수 있는 헬퍼 함수가 있습니다:

function zalg_sso_add_users_to_group() {
    $user_id = 1; // 사용자의 WordPress 사용자 ID
    $group_names = 'foo,bar,baz'; // 쉼표로 구분된 하나 이상의 그룹 이름, 쉼표 뒤에는 공백이 없어야 합니다!
    DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}

여러 사용자를 단일 그룹에 추가하려면 여전히 첫 번째 코드 예제에 있는 discourse_request 메서드를 사용해야 합니다.