제가 무언가를 잘못하고 있지 않다면, "/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 메서드를 사용해야 합니다.