WP Discourse를 설정하여 Discourse의 댓글을 표시하기

Discourse를 WordPress의 댓글 시스템으로 사용할 수 있습니다. 댓글 기능은 게시 기능에 의존하므로, 댓글이 작동하려면 게시 기능이 설정되어 있어야 합니다. 게시 설정을 완료했고 이제 댓글 설정을 준비했다면, 아래 짧은 영상을 시청하거나 아래 지침을 따르세요.

다음 단계

댓글 설정을 완료한 후, 다음 주제들을 살펴보는 것이 좋습니다.


지침

댓글 설정하기

Discourse 댓글이 WordPress 사이트에 표시되려면 Enable Discourse Comments(Discourse 댓글 활성화) 설정을 선택해야 합니다. 활성화되면 두 가지 옵션이 나타납니다. Display comments(댓글 표시) 옵션은 Discourse에 게시된 각 WordPress 게시물에 대해 댓글 템플릿을 로드합니다. 이 템플릿은 WordPress 게시물 아래에 Discourse 댓글을 표시합니다. Display a link to the comments(댓글로 연결되는 링크 표시) 옵션은 게시된 게시물 아래에 관련 Discourse 주제로 연결되는 링크를 표시하는 댓글 템플릿을 로드합니다. 링크에는 해당 주제에 대한 답변 수가 표시되지만, WordPress에는 답변 내용이 표시되지 않습니다.

이 두 가지 댓글 옵션 모두 WordPress 게시물에 대해 댓글 템플릿을 로드하는 방식으로 작동합니다. 이는 댓글이 게시물에 대해 활성화된 경우에만 작동한다는 것을 의미합니다. 모든 게시물에 대해 댓글을 활성화하되, Discourse에 게시되지 않은 게시물에 대해 과거의 WordPress 댓글은 표시하고 싶지 않다면 Remove WordPress Comments Template(WordPress 댓글 템플릿 제거) 설정을 활성화하세요.

설정

다른 댓글 설정들이 어떤 기능을 하는지에 대한 간단한 설명을 드립니다. 여전히 어떤 설정이 궁금하다면 이 주제에 답변을 남기고 추가 설명을 요청하세요.

Ajax로 댓글 로드

이 설정은 서버에서 로드하는 대신 WordPress 클라이언트에서 댓글을 로드하는 데 사용됩니다. 페이지 캐싱이 최신 댓글의 로드를 방해하고 있는 경우 유용합니다.

댓글 CSS 로드

이 설정은 WordPress에서 Discourse oneboxes와 인용문이 표시될 때 발생하는 문제를 수정하는 스타일시트를 로드합니다.

기존 WP 댓글 표시

이 설정을 선택하면 Discourse에 게시된 게시물에 대해 기존 WordPress 댓글도 함께 표시됩니다. 설정을 선택하세요.

기존 댓글 제목

기존 댓글을 표시하는 경우, 이 설정은 WordPress 댓글 위에 제목을 추가합니다.

선택적 가져오기 설정

댓글을 선택적으로 가져올 수 있도록 허용하는 여러 설정이 있습니다. 이들은 스스로 설명이 충분할 것입니다. 각 설정의 기본 값은 좋은 시작점이므로, 변경할 이유가 있는 경우에만 변경하세요.

  • Max Visible Comments (표시할 최대 댓글 수)
  • Min Number of Replies (최소 답변 수)
  • Min Score of Posts (게시물 최소 점수)
  • Min Trust Level (최소 신뢰 수준)
  • Bypass Trust Level Score (신뢰 수준 점수 우회)
  • Only Import Moderator-Liked (모더레이터가 좋아요한 것만 가져오기)
사용자 지정 날짜/시간 형식

이 설정은 WordPress 사이트에 표시되는 각 Discourse 댓글의 날짜 형식을 지정합니다. 기본 값으로 시작하세요. 날짜 형식을 변경하고 싶다면, 설정 설명의 링크를 클릭하여 방법에 대한 세부 정보를 확인하세요.

댓글 HTML 캐싱

이 설정은 성능을 향상시키는 데 사용할 수 있습니다. 댓글 HTML을 캐싱하면 Discourse로 전송되는 요청의 수를 줄일 수 있습니다. 관련 설정인 Clear Cached Comment HTML(캐시된 댓글 HTML 지우기)은 스스로 설명이 충분할 것입니다.

상세 댓글 로그

이를 활성화하면 오류(기본값) 외에도 Discourse에서 댓글을 성공적으로 가져온 모든 기록을 로그로 남깁니다.

댓글 데이터 동기화 Webhook

“Webhooks” 설정 패널에서 Sync Comment Data 웹훅을 활성화하면 WordPress에서 Discourse로 전송되는 API 요청의 수를 크게 줄일 수 있습니다. 웹훅을 활성화하기 전에

  1. 설정 설명에 제공된 Discourse URL(http://forum.example.com/admin/api/web_hooks)을 방문하세요.

  2. ‘New Webhook’ 버튼을 클릭하고 양식을 작성하세요.

    • Payload URL 필드에 WP Discourse Sync Comment Data 필드의 설명에 제공된 URL을 입력하세요. 이는 다음과 같은 형태가 될 것입니다(단, WordPress 사이트의 URL을 사용합니다): https://wp-discourse.dev/wp-json/wp-discourse/v1/update-topic-content.

    • Content Type 필드가 application/json으로 설정되어 있는지 확인하세요.

    • Secret 입력란에 최소 12자 이상의 문자열을 입력하세요. 그런 다음 이 동일한 키를 WP Discourse Webhook Secret Key 설정에 복사하세요.

    • ‘Which events should trigger this webhook?’ 상자에서 'Post Event’가 선택되어 있는지 확인하세요.

    • WordPress에서 특정 카테고리만 게시물을 게시하는 경우 Triggered Categories 필드를 사용하세요. 이렇게 하면 WordPress 사이트가 관련 Discourse 게시물이 없는 주제에 대한 웹훅 요청을 처리할 필요가 없어집니다.

    • Check TLS certificate of payload url 설정을 활성화된 상태로 두세요.

    마지막으로, ‘Active’ 체크박스를 활성화하고 create를 클릭하세요. 웹훅이 저장되면 Go to events 버튼을 클릭하세요.

  3. WordPress로 돌아와서 Discourse의 웹훅 시크릿을 Webhook Secret Key 필드에 입력했는지 확인하고 Sync Comment Data 웹훅 설정을 활성화하세요. 그런 다음 옵션을 저장하세요.

이제 Discourse 웹훅이 작동해야 합니다. Discourse에서 웹훅의 Ping 버튼을 클릭하여 확인해야 합니다(/admin/api/web_hooks/:webhook_id/events에서 찾을 수 있음). 웹훅을 핑했을 때 상태 코드 200이 반환되는지 확인하세요.

WordPress 아카이브 페이지의 comments_number 동기화 주기 조정

게시물에 대한 정확한 Discourse 댓글 수를 얻으려면 플러그인은 현재 댓글 수를 가져오기 위해 주기적으로 Discourse에 HTTP 요청을 해야 합니다. 단일 페이지의 경우 이 주기는 10분을 초과하지 않도록 설정됩니다. 아카이브 페이지의 경우 주기는 24시간을 초과하지 않도록 설정됩니다. 이는 아카이브 페이지에 접근할 때마다 Discourse에 여러 요청을 보내는 것을 피하기 위한 것입니다.

사이트의 아카이브 페이지를 표시할 때 플러그인이 Discourse에 너무 많은 요청을 보내고 있다고 판단되면, 'discourse_archive_page_sync_period' 필터에 연결하여 archive_page_sync_period를 조정할 수 있습니다. 이를 수행하려면 테마의 functions.php 파일에 다음과 같은 코드를 추가하세요:

add_filter( 'discourse_archive_page_sync_period', 'my_namespace_archive_page_sync_period' );
function my_namespace_archive_page_sync_period( $sync_period ) {
  // This will change to sync_period for archived posts to once a week.
  return WEEK_IN_SECONDS;
}

아카이브 페이지의 현재 댓글 수를 가져오기 위해 플러그인이 Discourse에 충분한 요청을 하지 않는다고 판단되면, 테마의 functions.php 파일에 다음과 같은 코드를 추가할 수 있습니다. 이는 archive_page_sync_period를 10분으로 설정합니다.
참고: 분주한 사이트에서는 서버에 큰 부하를 줄 수 있습니다.

add_filter( 'discourse_archive_page_sync_period', 'my_namespace_archive_page_sync_period' );
function my_namespace_archive_page_sync_period( $sync_period ) {
  // This will change to sync_period for archived posts to once a week.
  return 10 * MINUTE_IN_SECONDS;
}

WordPress 댓글 템플릿을 로드하지 않고 댓글 표시

WP Discourse 플러그인은 WordPress 댓글 템플릿을 사용하여 Discourse 댓글을 로드합니다. 테마가 댓글 템플릿을 로드하지 않는 경우, 정적 get_discourse_comments 헬퍼 함수를 사용하여 댓글을 표시할 수 있습니다. 이 함수에는 댓글을 표시하려는 WordPress 게시물의 id를 제공해야 합니다. 사용 예시는 다음과 같습니다:

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments(859);
echo $discourse_comments;

댓글은 Enable Discourse Comments/Display Comments 옵션(플러그인의 Comment Settings 탭에서 찾을 수 있음)을 선택했을 때와 동일한 방식으로 표시됩니다. 이 함수가 사용되면 해당 설정의 값은 무시되지만, 다른 모든 댓글 설정은 준수됩니다.

문제 해결

Discourse 댓글의 가장 흔한 문제는 Discourse에서 게시물이 작성된 직후에는 즉시 표시되지 않을 수 있다는 것입니다. 이 지연은 의도적인 것으로, 플러그인은 Discourse에 필요한 요청의 수를 줄이려 시도합니다. 페이지가 로드될 때마다 요청을 보내면 사이트가 느려집니다. 댓글이 즉시 표시되지 않으면 페이지를 새로 고침하기 전에 10분을 기다리세요.

Discourse와 WordPress 댓글을 모두 표시할 때 댓글 수 관련 문제

wp-discourse 플러그인은 WordPress의 get_comments_number 필터 후크를 사용하여 게시물을 위해 생성된 Discourse 댓글의 수가 테마 전체에 표시되도록 합니다. 이는 게시물에 대해 Discourse와 WordPress 댓글이 모두 표시될 때 충돌을 일으킵니다. 플러그인은 대부분의 곳에서 이 충돌을 해결할 수 있습니다. 해결할 수 없는 한 가지 장소는 WordPress 테마가 댓글 섹션의 상단에 자주 표시하는 댓글 제목입니다. 이는 "2 thoughts on…"와 같은 내용으로 시작되는 섹션입니다.

가장 쉬운 방법은 테마의 css 파일에 규칙을 추가하는 것입니다.

.discourse-comments-area ~ .comments-area .comments-title  {
	display: none;
}
8개의 좋아요

@angus 정말 잘 만든 가이드와 영상 감사합니다. 플러그인을 구현했는데, 댓글 기능에서 막혀 있습니다. 두 가지 질문/문제가 있습니다:

  • discourse에서 wordpress의 공유 게시물에 답글을 게시하면 wordpress의 답글 수는 변경되지만, 실제 댓글이 표시되지 않습니다.
  • 사용자가 discourse를 통해서만 답글을 달 수 있도록 wordpress의 댓글 기능을 끄고 싶은데, 가능한가요?

아래는 우리가 확인한 내용입니다. 이 '1’개의 답글은 discourse에서 온 것이지만, 답글 본문은 보이지 않습니다:

CC: @Abdelrahman_MoHamed

안녕하세요 @Jacob_Peebles,

위 가이드를 따랐다면 다음으로 확인할 것은 테마입니다. 혹시 블록 테마(Block Theme)를 사용 중인가요? 그렇다면 다음 내용을 참고해 주세요:

네, 워드프레스에서 댓글 기능을 끄면 됩니다.

  1. 대시보드에서 설정 > 토론을 선택하세요.
  2. ‘새 게시물에 대한 댓글 작성 허용’ 옆의 체크박스를 해제하세요.
  3. 설정 저장 버튼을 클릭하세요.
1개의 좋아요

@angus - 완벽하게 작동해서 정말 좋습니다! 네, Apparently 우리가 ‘블록’ 에디터를 사용하고 있는 것 같습니다. 여기에서 기능이 정상적으로 작동하는 것을 확인할 수 있습니다:

유일하게 이상한 부분은 스타일/폰트가 discourse 댓글로 캐스케이드되지 않는다는 점입니다. 이것이 단순히 우리 테마의 문제인지, 아니면 별도로 언급할 가치가 있는 것인지 확실하지 않습니다.

다시 한번 감사합니다.

죄송합니다, 스크린샷도 첨부합니다.

제이콥, 잘 작동한다고 해서 기쁩니다.

직접 댓글 스타일링을 추가해야 합니다. 각 테마마다 스타일링 방식이 다르기 때문에 디스코urses 댓글은 기본적으로 매우 가볍게 스타일링되어 있습니다. 제이콥의 경우, 다음과 같은 기본적인 스타일링이 문제를 해결하는 데 도움이 될 것입니다.

ol.comment-list {
    list-style: none;
    padding: 0;
}

img.avatar.photo.avatar-default {
    height: 40px;
    width: 40px;
}

.comment-author.vcard {
   display: flex;
   align-items: center;
   gap: 1em;
}

1개의 좋아요

훌륭해요 @angus

@angus 님, 안녕하세요.

훌륭한 플러그인과 도움이 되는 설명에 감사드립니다!

저는 Discourse를 WordPress 웹사이트에 통합했으며, 연결도 정상적으로 되어 있습니다.
WP 사이트에서 게시물을 생성하면 Discourse에서 새로운 Topic으로 가져오는 것을 확인했습니다. 정말 좋습니다!

하지만 Discourse에서는 게시물의 초기 내용(예: hello world 등)만 발췌문으로 표시되며, WP 게시물의 내용을 수정한 후에도 Discourse의 Topic 내용이 업데이트되지 않습니다. ‘Show Full Post’ 버튼을 클릭해야만 내용 변경이 반영됩니다. 즉, 게시물의 전체 내용을 발췌문이 아닌 전체 텍스트로 표시하도록 설정을 변경할 수 없습니다. 그렇게 설정하면 Discourse Topic에서 해당 버튼이 사라지고, 업데이트되기 전의 초기 내용만 표시됩니다. 제가 무슨 말을 하고 있는지 이해가 되실지 모르겠습니다.


(전체 내용 표시로 설정된 경우)


(발췌문만 표시하도록 설정된 경우의 발췌문)


(전체 텍스트를 표시하기 위한 버튼을 클릭했을 때의 모습으로, 이는 WP 게시물에 있는 내용과 동일합니다)

그리고 또한, Discourse에서 해당 Topic에 대한 답글로 작성된 댓글은 WP의 게시물 아래에 표시되지 않습니다. 저는 댓글 기능을 활성화했으며, 블록 에디터가 아닌 Astra 테마를 사용 중입니다. 이 문제를 해결하기 위해 무엇을 해야 할지 모르겠습니다.

이 두 가지 사항에 대해 조언을 주시면 감사하겠습니다. 감사합니다!

안녕하세요 @Clo, 플러그인을 사용해 주셔서 감사합니다. 게시물을 게시할 때 기대하는 이상적인 상태를 좀 더 자세히 설명해 주실 수 있을까요? “사용자 스토리” 형식으로 정리해 주시면 감사하겠습니다. 또한 댓글에 대해 질문이 있는데, 현재 사용 중인 사이트에서 WordPress 댓글 기능이 활성화되어 있나요?

@angus 님 안녕하세요

드디어 Discourse 사이트에서 WP 사이트로 댓글이 가져와진 것 같습니다. 시간이 좀 걸렸네요. 감사합니다!

다만, Discourse에서 새 주제가 생성될 때마다 플러그인이 WP에 새 게시물을 자동으로 생성할 수 있는지 궁금합니다. 아니면 반대 방향(WP에서 Discourse로)으로만 가능한가요?

그것은 WordPress와 Discourse 양쪽에 추가적인 맞춤형 플러그인이 있어야만 가능합니다. WP Discourse 플러그인 자체는 이를 위해 설계되지 않았습니다.

정말 감사합니다, 도움이 많이 됩니다.
훌륭한 플러그인입니다!

1개의 좋아요