그러나 _대부분_의 사용자의 경우, groups 배열은 단순히 비어 있습니다 (0).
해당 사용자들은 실제로 그룹의 멤버이므로, 왜 이런 일이 발생하는지 이해할 수 없습니다.
"기본(primary) 그룹"과 관련이 있는지 확인해 보았지만, groups 배열이 있는 사용자들도 어떤 기본 그룹에도 속해 있지 않으므로 이것이 문제가 되는 것은 아닙니다.
사용자 로그인을 처리하기 위해 WP SSO Connection을 사용하고 있습니다. 따라서 사용자는 WP 인스턴스에서 로그인하며, Discourse 인스턴스는 기본적으로 WP의 "슬레이브(slave)
현재 로그인된 사용자를 위한 세션 엔드포인트(session/current)를 사용하고 있습니다. 이 엔드포인트를 통해 “자동” 그룹(예: 신뢰 수준 그룹)을 받는 것은 스태프 멤버만 가능합니다.
이와 관련된 예시로 https://meta.discourse.org/g를 확인해 보세요. 엔드포인트는 다르지만 동일한 원리가 적용됩니다. 이 포럼의 스태프 멤버가 아니기 때문에 메타(meta)에서 모든 신뢰 수준 그룹을 볼 수 없다는 것을 확인할 수 있습니다.
모든 사용자 그룹, 특히 자동 그룹을 포함하여 모든 그룹을 가져오려면 API 키를 사용한 인증된 요청이 필요합니다. 이 자바스크립트가 워드프레스에서 실행되고 있다면, 이를 위해 WP Discourse 유틸리티 함수를 사용할 수 있습니다. 관리 인터페이스에서 제공한 API 키를 사용하여 요청을 수행하게 됩니다.
현재 사용자 객체에 액세스할 수 있으며, 이를 통해 사용자가 자신이 속해 있다고 인식하는 그룹을 확인할 수 있습니다. 이 객체는 모든 사용자에게 이미 로드되어 있으므로, 현재 사용자를 참조하는 다른 테마와 동일한 방식으로 플러그인 API에 액세스할 수 있습니다. Theme Developer Quick Reference Guide를 참고하고 주변을 둘러보시면 예시를 찾을 수 있습니다.
이 특정 인스턴스에서 groups는 여전히 비어 있습니다(현재 세션 대신 사용자 API를 사용해도 마찬가지입니다). 하지만 group_users에서 그룹 _ID_를 확인하는 방식으로 이 문제를 해결할 수 있었습니다. 이 테이블도 동일한 데이터를 저장하지만 이름이 아닌 ID를 사용하거든요.
저는 원래 접근 방식을 데이터 가져오기에 사용했습니다. 이 코드는 테마나 플러그인이 아니라 Discourse에 head 스크립트로 추가된 스니펫일 뿐이거든요.
실제 api는 작동하지 않았지만, AJAX 방식은 제가 필요한 용도에는 똑같이 잘 작동했습니다.
다시 한번 모두의 의견에 감사드립니다. 특히 제 경우에 맞는 올바른 해결책을 찾아주신 @Lhc_fl님께 감사드립니다.