사용자가 WordPress에서 시간대를 조정할 수 있도록 기능을 추가하고 있습니다. 이렇게 하면 사용자의 사이트 활동이 현지 시간으로 표시됩니다. 이 작업을 진행하면서, 해당 설정이 포럼에도 반영되도록 하여 사용자가 동일한 설정을 두 번 하지 않도록 하려 합니다. 현재 Discourse에서는 사용자가 환경설정/프로파일에서 자신의 위치와 시간대를 직접 설정하므로, 가능하면 이 부분을 오버라이드하고 싶습니다.
“site_settings/category/login” 아래에 "discourse connect overrides location"이라는 DiscourseConnect 설정이 있는 것으로 보입니다. 이 설정은 “location” 필드에만 적용되는 건가요, 아니면 시간대도 함께 처리되나요? 이 옵션이 체크되어 있을 때, DiscourseConnect는 WP 데이터베이스의 어디에서 이 정보를 가져오나요?
즉, 자체적으로 유사한 설정을 구현할 경우, “location” 옵션을 활성화했을 때 DiscourseConnect를 통해 올바르게 전달되도록 올바른 위치에 저장하고 싶습니다.
이 문제에 대해 좀 더 살펴본 결과, DiscourseConnect에서 “위치 덮어쓰기” 옵션을 체크해도 WordPress의 시간대 설정이 가져와지지 않는 것 같고, 이를 원한다면 사용자가 해당 정보를 수정할 때마다 API를 통해 설정하는 것이 가장 좋은 방법일 것 같습니다. 맞는지 알려주세요.
하지만 여전히 WP 쪽에서 "위치"가 어디서 오는지, 혹은 아예 넘어오지 않는지 확실하지 않습니다. 예를 들어 제 사용자의 "마지막 페이로드"에서 “위치” 토큰을 찾지 못했습니다. 대신 아바타, 자기소개, 사용자 이름, external_id 등은 확인됩니다. 특히 "자기소개 덮어쓰기"가 꺼져 있음에도 자기소개가 넘어오는 것을 보면, "위치"도 당연히 넘어와야 하지 않을까요?
@simon 님, 혹시 시간 되시면 말씀 부탁드려요. 플러그인 전문가라고 알고 있습니다. 혹시 관련 통찰이 있으시면 알려주세요. 감사합니다!
Hey @troygrady, 답장이 늦어서 죄송합니다 (저는 WP Discourse 플러그인 관련 질문을 담당하고 있습니다). 시간대와 위치 설정은 서로 무관하므로 별도로 답변드리겠습니다.
시간대
사용자의 활동이 사용자 자신의 현지 시간으로 표시되기를 원한다는 의미인지 확인해 주실 수 있을까요? 그렇다면 워드프레스와 달리, Discourse에서는 현재 이것이 기본 동작입니다(DiscourseConnect를 사용하지 않아도). 사용자가 설정하지 않은 경우 자동으로 업데이트됩니다. 예를 들어, 저는 최근에 Australia/Perth 시간대에서 Europe/Oslo 시간대로 변경했습니다. 메타 사이트에서 제 프로필의 시간대 설정을 건드리지 않았는데, 이제 다음과 같이 표시됩니다.
워드프레스 사용자 프로필에서 설정한 위치를 Discourse 사용자 프로필의 위치 필드와 동기화할 수 있습니다. 워드프레스에는 Discourse의 위치 필드에 해당하는 표준 필드가 없기 때문에 기본적으로 동기화되지 않습니다. 여기에서 일부 코드를 추가해야 합니다. 테마의 functions.php 파일이나 코드를 추가할 수 있는 다른 위치에 다음과 같은 코드를 추가해야 하며, 핵심 부분은 wpdc_sso_params 필터의 사용입니다.
혼동을 드려 죄송합니다! 네, 현지 시간대를 말씀하신 것이 맞고, 네, Discourse의 표준 동작 방식이 좋습니다. 말씀하신 대로 문제는 Discourse가 아니라, 사용자가 사이트를 자신의 현지 시간대로 볼 수 있는 기능을 제공하지 않는 WP(WordPress)에 있습니다. 이것이 우리가 추가하고 싶은 기능입니다. 사용자가 시간대를 설정할 수 있도록 하면, Discourse의 설정을 덮어쓰도록 하여 양쪽이 동기화되도록 해야 한다고 생각했습니다. 이것이 DiscourseConnect에서 제공하는지 여부를 알고 싶었던 것입니다. 제공하지 않는 것 같습니다.
모르고 있었던 점은 Discourse의 설정이 자동화된다는 것입니다. 그렇다면 현재 상태를 그대로 두는 것이 좋을 수도 있습니다. 즉, WP에서 현지 시간대를 구현하되, 그 값으로 Discourse의 값을 덮어쓰지 않는 방식입니다. 동기화가 어긋날 수는 있지만, 대부분의 사용자에게는 큰 문제가 되지 않을 것입니다.
완벽합니다. 이것이 제가 찾던 정보 조각이었습니다 — DiscourseConnect가 WP 쪽에서 위치 데이터를 어디서 가져와야 하는지 몰랐습니다. 우리는 usermeta에 자체 위치 필드를 수동으로 구현했으므로, wpdc_sso_params 훅을 사용하여那里的 값만 가져오면 됩니다.
제 머리가 둔해서 놓친 것 같습니다. wpdc_sso_params에 대한 문서가 어딘가에 있나요? 이 스레드를 찾았는데, 당분간은 이걸로 충분해 보입니다:
wpdc_sso_params에 대해 말씀드리자면, 사용자 플랫폼의 홈페이지 링크를 포함해서 해당 사용자의 카드에 표시하고 싶습니다. 커스텀 필드로 설정한 후 비슷한 훅을 통해 전달하는 방식으로 처리할 수 있을 것 같습니다. 다만 이 부분은 내부용으로만 사용하고, 사용자가 직접 편집할 수 있는 항목으로 보이도록 하지는 않겠습니다. 워드프레스의 모든 가입 과정을 우리가 관리하고 있고, 포럼 계정도 자동으로 처리되므로, 이 방식이 해당 문제를 해결할 수 있을까요? 즉, 커스텀 필드를 생성한 후 생성 이후에는 편집 불가로 설정하고, 이후로는 SSO를 통해 값을 업데이트하는 방식입니다. 사용자는 어디에서도 편집 입력란을 볼 수 없게 되나요?
문제는 커스텀 사용자 필드가 사용자가 접근할 수 없도록 설정하더라도 Discourse 가입 폼에서 항상 편집 가능 상태로 표시된다는 점입니다. 플랫폼 홈페이지 URL은 시스템이 자동으로 생성하기 때문에 사용자가 이를 편집하는 일은 절대 원치 않습니다. 다만, 우리 사용자는 실제로 Discourse 가입 폼을 보지 않으므로 이 문제는 무관할 수도 있습니다.
다른 표현으로 하자면, Discourse의 어떤 사용자 편집 폼에도 표시되지 않는, 내부 전용으로만 사용되는 커스텀 필드를 만들 수 있는 방법이 있을까요? WordPress나 다른 외부 플랫폼의 데이터를 Discourse 화면에 통합하는 데 있어 이러한 기능은 다양한 용도로 활용될 수 있을 것이라 생각합니다.
네, 사용자 카드에 메인 사이트의 사용자 계정과 관련된, WP가 생성한 임의의 필드(예: 홈페이지 URL 등)를 표시하고 싶습니다. 이러한 필드는 계정 생성 시에도 사용자가 직접 입력하는 것이 아니라, 오직 표시 목적으로만 사용됩니다. 저희 경우를 보면, 프로필과 카드에 대한 표시 옵션이 이미 포함된 커스텀 “user” 필드가 가장 적합한 접근 방식인 것 같습니다. 게다가 사용자는 가입 폼을 볼 일이 전혀 없으므로요.
예외적인 경우는 SSO를 사용하지 않는 상황일 텐데, 이 경우 사용자는 해당 필드를 채울 의도가 없는데도 가입 폼에서 그 필드들을 보게 됩니다. 이런 경우의 해결책은 CSS로 필드를 숨기는 것이 될 것 같습니다.