디스커스 플러그인 "토론 참여 링크" 섹션에 템플릿 훅을 추가하려면?

‘댓글에 링크(표시 안 함)’ 옵션이 선택된 상태에서 링크 텍스트 자체를 변경할 수 있는 위치는 확인했습니다. 그런데 이 링크 위/아래에 텍스트나 HTML을 추가할 수 있는 방법이 있을까요? discourse_replies_html 필터와 비슷하지만, .wpdc-join-discussion div 내부의 내용을 수정하고 ‘토론 참여’ 링크가 들어갈 위치를 조정하는 용도로요.

케이라, 안녕하세요. 현재 wpdc-join-discussion div의 HTML을 변경할 수 있는 필터나 템플릿이 없습니다. 원하시는 결과, 즉 최종적으로 어떤 HTML을 얻고 싶으신지 공유해 주실 수 있을까요? 해당(그리고 아마 다른 사람들의) 사용 사례를 지원할 수 있도록 필터를 추가해 볼 수 있는지 확인해 보겠습니다.

안녕하세요, Angus님.

사용 사례는 다음 웹사이트와 동일한 환경입니다:

즉, 클래식 테마를 사용하는 사이트에서 공개된 WordPress 댓글과 함께 비공개 Discourse 댓글을 함께 사용하는 것입니다. 저는 맥락과 사용자 경험(UX)을 위해 ‘토론 참여’ 링크 위에 제목과 설명 텍스트를 추가하고 싶습니다. 현재는 게시글 입력 영역 뒤에 오는 테마 기본 위젯 영역과 CSS를 활용해 시각적으로 이를 구현할 수는 있지만, 문서 구조 측면에서는 이상적이지 않습니다. (이 경우 위젯은 리더 뷰/모드에서 기사의 일부로 인식되는 반면, 실제 .wpdc-join-discussion div는 그렇지 않습니다.) 기사 레이어 외부에 새로운 위젯 영역을 만들 수는 있지만, 이 커스터마이징은 논리적으로 ‘토론 참여’ 링크와 함께 .wpdc-join-discussion div 내부에 위치해야 합니다.

네, 감사합니다. 다음 버전에서 이 사용 사례를 지원하도록 검토해 보겠습니다.

고려해 주셔서 감사합니다! discourse_replies_html처럼 개방형인 솔루션을 선호합니다. 이렇게 하면 .wpdc-join-discussion 안에 내부 “wrapper” div를 추가하거나, 향후 필요할 수 있는 다른 요소들을 유연하게 다룰 수 있기 때문입니다. 플러그인 개발 측면에서도 단순하게 유지되기를 바랍니다(새로운 관리자 화면 설정이 필요하지 않도록).

@Kayla 곧 플러그인의 새로운 버전을 출시할 시점이 다가오고 있으며, 요청하신 사항을 제대로 반영하고 있는지 확인하고 싶습니다. 여기에 wpdc_join_discussion_link_html 필터를 추가하는 것을 고려하고 있습니다.

$link_html = '<div class="wpdc-join-discussion"><a class="wpdc-join-discussion-link" href="' . esc_url_raw( $discourse_permalink ) . '"' . $new_tab . '>' . esc_html( $link_text ) . '</a></div>';
$link_html = apply_filters( 'wpdc_join_discussion_link_html', $link_html, $comments_count, $post_id );
return $link_html;

이 필터는 discourse_replies_html 필터와 동일한 역할을 수행하지만, 링크 HTML에 적용됩니다.

이 방식이 괜찮으신가요?

네, 그렇게 생각해요. 제 PHP 지식 수준이 패턴이나 예제를 그대로 가져다 쓰는 정도라서, 이 필터를 이렇게 사용하는 게 맞는지 명확히 하고 싶어요.

function custom_discussion_link( $input ) {  
  ob_start();
  ?>
  <div class="wpdc-join-discussion">
    <div class="custom-wrapper-div">
      <h3>Heading</h3>
      <p>Explanation/context yada yada.</p>
      <?php echo '<a class="wpdc-join-discussion-link" href="' . esc_url_raw( $discourse_permalink ) . '"' . $new_tab . '>' . esc_html( $link_text ) . '</a>'; ?>
    </div>
  </div>
  <?php
  $link_html = ob_get_clean();
  return $link_html;
}
add_filter( 'wpdc_join_discussion_link_html', 'custom_discussion_link' );

너무 엉뚱한 방식은 아니길 바랍니다. :face_with_peeking_eye:

음, 해당 필터에서 보간하는 변수들이 제대로 전달되고 있는지 확인해야 할 것 같습니다. 이 필터의 경우 그렇게 하는 것이 합리적입니다. 즉,

apply_filters( 'wpdc_join_discussion_link_html', $link_html, $discourse_permalink, $new_tab, $link_text )

이렇게 정의한 뒤, 다음과 같이 사용하게 됩니다(인수 개수에 주의하세요).

function custom_discussion_link( $link_html, $discourse_permalink, $new_tab, $link_text) {  
  ob_start();
  ?>
  <div class="wpdc-join-discussion">
    <div class="custom-wrapper-div">
      <h3>제목</h3>
      <p>설명/컨텍스트 등.</p>
      <?php echo '<a class="wpdc-join-discussion-link" href="' . esc_url_raw( $discourse_permalink ) . '"' . $new_tab . '>' . esc_html( $link_text ) . '</a>'; ?>
    </div>
  </div>
  <?php
  $link_html = ob_get_clean();
  return $link_html;
}
add_filter( 'wpdc_join_discussion_link_html', 'custom_discussion_link', 10, 4 );

이 새로운 필터는 다음 버전에서 제공됩니다. 물류 관련 사정으로 인해 릴리스가 다소 지연될 예정이며, 다음 버전은 10월 초에 출시될 것입니다.

정말 감사합니다! 다음 릴리스를 기다리고 있을게요. :partying_face: