WP에서 Discourse로 돌아가는 링크가 커스텀 코드를 사용할 때 표시되지 않음

안녕하세요,

WP 쪽에서 Discourse 포럼으로 연결되는 링크가 없는 문제가 있습니다. 이 문제에 대해 포럼에서 찾은 답변들만 몇 가지 나열하면 다음과 같습니다:

  • WP 관리자 화면 → 플러그인 섹션에서 모든 ‘Text Content’ 필드가 채워져 있습니다.
  • 동기화는 실행되고 있으며, 양쪽에서 댓글을 확인할 수 있습니다.
  • _postmeta DB 테이블에 URL 문자열이 존재합니다.

image

댓글 섹션에서는 다음과 같은 Notices가 표시됩니다:

**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **90**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **106**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **127**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **127**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **148**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **148**

이것들은 모두 해당 파일의 $URL 변수와 관련이 있습니다. 저는 다음과 같이 댓글을 호출하고 있습니다:

<?php
global $post;
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments($post->ID);
echo $discourse_comments;
?>

예시 URL:
https://fxweb.snowfreakz.nl/nogmaals-een-test/
https://fxdisc.snowfreakz.nl/t/nogmaals-een-test/23/2

<? ` echo get_post_meta( $post->ID, 'discourse_permalink', true ); ` ?>

위와 같은 직접 호출을 해도 링크로 내용이 반환되지 않습니다(다른 토픽에서 발견한 내용입니다).

Apache / PHP 7.4 / WP 6.0.2 환경에서 실행 중입니다.
수 시간 동안 문제를 해결하려 했지만 더 이상 방법이 없습니다. 혹시 아이디어가 있는 분 계신가요?!
미리 감사드립니다.

Joep

Joep님,

이 두 가지가 모두 사실이라면, 사이트에는 WordPress Discourse와 무관한 다른 문제가 있는 것입니다.

이것이 최근에 갑자기 시작되었나요? WordPress 설치 환경에서 최근에 변경된 다른 것이 있나요? 다른 플러그인, 테마, 캐싱 등입니다.

Angus님,

연락 주셔서 감사합니다… ‘새로’ 설치한 WordPress에 Bricks 템플릿 빌더를 사용 중이고, 연결을 위해 방금 WPDiscourse를 설치했습니다. mod_headers 서버 캐싱 외에 스크립트를 수정하는 다른 공격적인 플러그인은 없습니다.

직접 PHP 코드를 다시 추가해 보니… 신기하게도 URL이 표시됩니다. 무엇을 다르게 했는지 모르겠습니다.

<?php
global $post;
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments($post->ID);
echo $discourse_comments;

echo get_post_meta( $post->ID, 'discourse_permalink', true );
?>

하지만 여전히 URL이 생성되어야 하는 코드 줄과 관련된 Notices가 표시되고, “Continue the discussion at” 이후의 링크가 나타나지 않습니다.

https://fxweb.snowfreakz.nl/nogmaals-een-test/

Joep

알겠습니다. 왜 댓글과 영구 링크를 직접 만든 코드로 불러오고 있나요? 플러그인이 자동으로 처리해 줍니다.

안녕하세요,

“main” WordPress 댓글(브릭스 템플릿 요소)을 포함하면 Discourse 리뷰 플러그인으로 대체되지 않는 "일반 WP 댓글 양식"이 표시됩니다. 위 URL을 참고해 주세요. 블로그 아래에 WP 댓글을 추가하도록 레이아웃을 변경했습니다.

백엔드 설정

따라서 리뷰가 표시되고 Bricks 빌더와의 호환성 문제를 우회할 수 있도록 코드를 수동으로 추가했습니다.

Joep

알겠습니다. 여기서 사용하고 계신 템플릿 빌더에 로우 우선순위 관련 문제가 있는 것 같습니다. 내일 재현해 보겠습니다. 조금만 기다려 주세요.

참고용으로 템플릿 빌더를 보내도 될까요?

다음 릴리스(2.4.6)에서 get_discourse_comments 유틸리티 함수에 여러 가지 업데이트가 적용될 예정입니다. 해당 버전은 현재 릴리스 준비 단계에 있습니다. 업데이트된 유틸리티 메서드 시그니처는 다음과 같습니다.

/**
* 코멘트 템플릿을 로드하지 않고 표시할 수 있도록 Discourse 코멘트 HTML을 가져옵니다.
*
* @param int $post_id 코멘트를 표시할 게시물의 ID입니다.
* @param bool $perform_sync 코멘트를 로드할 때 코멘트 동기화가 수행될 수 있는지 여부를 결정합니다.
* @param bool $force_sync 코멘트를 로드할 때 코멘트 동기화 캐시를 우회할지 여부를 결정합니다.
* @param string $comment_type 코멘트 표시 유형입니다.
*
* @return string
*/
public static function get_discourse_comments( $post_id, $perform_sync = true, $force_sync = false, $comment_type ) {

@Joep_Kannegieter 이 변경 사항은 당신의 경우(그리고 몇 가지 다른 경우)에 다음과 같은 몇 가지 결과를 가져올 것입니다:

  • 코멘트 표시가 정상적으로 작동합니다.
  • 코멘트 표시 유형(예: 모든 코멘트 또는 코멘트 링크)을 프로그래매틱으로 제어할 수 있습니다.
  • 코멘트 캐시를 프로그래매틱으로 제어할 수 있습니다.

자세한 내용은 아래를 참조하세요.

감사합니다! 설치해서 사용해 볼게요. 결과 알려드릴게요.

아직 출시되지 않았습니다. 워드프레스 관리자 패널에서 플러그인 2.4.6 버전이 업데이트 가능하도록 표시될 때까지 기다려 주세요. (여기서도 알려드릴게요.)

안녕하세요 Angus,

다시 이 문제를 다뤄보겠습니다. 기본적으로 "동작하게 만들었다"라고 할 수 있지만, Bricks Builder 템플릿에서는 그렇지 않습니다.
twentytwenty 테마로 전환하면 Discourse 통합 기능이 블로그 게시물 아래에 표시되며, 댓글 필드를 대체합니다.

Bricks Builder를 사용할 때는 WP 댓글을 불러오는 “Comments” 요소가 있는데, 플러그인이 이를 대체하지 않습니다. 다음 코드처럼 프로그래매틱하게 호출해도 마찬가지입니다:

프로그래매틱하게 호출하면 다음과 같은 오류가 발생합니다:

Error: Too few arguments to function WPDiscourse\Utilities\Utilities::get_discourse_comments(), 1 passed in /home/u43655p432443/domains/domain.nl/public_html/wp-content/themes/bricks/includes/elements/code.php(159) : eval()'d code on line 4 and exactly 4 expected

따라서 Bricks와 관련된 문제인 것 같습니다. Bricks 커뮤니티에도 문의해 보겠습니다.

Joep

지금은 템플릿에서 코멘트를 불러오기 위해 PHP를 사용하고 있습니다.

<?php comments_template(); ?>

이렇게 하면 Bricks의 코멘트 요소를 건너뛰고 WP 코어를 사용하게 되며, 잘 작동합니다.

Joep

이 오류는 유틸리티 함수 get_discourse_comments의 사용법을 업데이트해야 한다는 것을 알려줍니다. 사용 예시는 다음과 같습니다.

global $post;
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments($post->ID, true, true, 'display-comments');
echo $discourse_comments;