WP Discourse 플러그인을 사용하여 WordPress 게시물을 Discourse에 게시하여 커뮤니티가 WordPress 콘텐츠에 대해 논의할 수 있습니다. 게시 설정을 구성하려면 먼저 WordPress에 WP Discourse 플러그인을 설치하고 Discourse에 연결해야 합니다. 시작할 준비가 되었다면, 먼저 이 짧은 비디오를 시청하거나 아래 설명을 따르세요.
다음 단계
게시 설정을 완료한 후, 다음 주제들을 확인해 보시기 바랍니다.
설명서
게시 설정
설정을 변경한 후에는 항상 저장해야 합니다. 페이지 하단의 ‘옵션 저장’ 버튼을 클릭하세요.
설정 항목들은 비교적 명확합니다. 이해가 어려운 항목이 있다면 이 주제에 답변을 남겨 추가 설명을 요청해 주세요.
기본 Discourse 카테고리
게시물이 Discourse에 게시될 기본 카테고리를 설정합니다. 이 설정은 WordPress의 새 게시물 작성 화면에서 개별 게시물별로 덮어쓸 수 있습니다.
하위 카테고리 표시
WordPress에서 게시할 수 있는 카테고리로 포럼의 하위 카테고리를 사용하고자 하는지 여부를 나타냅니다. 하위 카테고리가 기본 Discourse 카테고리 옵션 입력 필드에 사용 가능하도록 나타나려면 이 설정을 저장해야 합니다.
카테고리 업데이트 강제
포럼에 새 카테고리를 추가했으며 WordPress 사이트에서 사용 가능하도록 하려는 경우에 사용합니다. 이 설정을 활성화하고 옵션 페이지를 저장하면 Discourse에 단일 API 호출을 하여 Discourse 카테고리를 가져옵니다. 활성화한 후, 댓글 탭으로 다시 이동하면 설정이 비활성화되어 있는 것을 볼 수 있습니다.
태그 허용
WordPress를 통해 생성된 Discourse 주제에 태그를 추가하기를 원하면 활성화하세요.
비공개 주제로 게시
WordPress에서 게시된 게시물이 Discourse에서 비공개(unlisted)로 표시되도록 합니다. 댓글 데이터 동기화 웹훅 설정을 활성화하면, 비공개 게시물이 Discourse에서 첫 번째 답변을 받을 때 공개됩니다.
전체 게시물 내용 사용
발췌문 대신 전체 WordPress 게시물을 Discourse 포럼에 게시할 수 있게 합니다. Discourse에서 게시물 아래에 전체 게시물 보기 버튼이 표시되지 않도록 하려면, Discourse의 embed truncate 사이트 설정을 해제해야 합니다(yourforum.com/admin/site_settings/category/posting에서 찾을 수 있음).
사용자 정의 발췌 길이
전체 게시물 내용 사용 설정을 선택하지 않은 경우, 이 설정은 해당 길이의 발췌문을 생성하여 Discourse에 게시합니다. WordPress 게시물 생성 시 발췌 메타 박스에 발췌문을 추가하여 수동으로 발췌문을 생성할 수도 있습니다.
자동 게시
Discourse에 게시될 게시물 유형에 대해, 새 게시물 작성 화면에 나타나는 Discourse에 게시 체크박스를 미리 선택합니다. 게시물 생성 시 체크박스를 해제할 수 있습니다.
게시된 주제 자동 추적
이 설정은 기본적으로 활성화되어 있습니다. 활성화되면 WordPress에서 Discourse로 게시된 게시물의 작성자는 해당 주제를 자동으로 ‘감시(Watching)’ 상태가 됩니다(모든 새 답변에 대한 Discourse 알림을 받음).
게시할 게시물 유형
이 설정은 반드시 설정해야 합니다. 기본값은 post이지만, 페이지와 사용자 정의 게시물 유형도 선택할 수 있습니다.
태그별 게시물 제외
이 설정에 WordPress 태그를 추가하면, 해당 태그 중 하나를 가진 WordPress 게시물은 Discourse에 게시되지 않습니다.
Discourse 이름 필드 비표시
이것은 사용자 프로필에서 “Discourse 사용자 이름” 필드를 숨깁니다. Discourse 사용자 이름은 게시물을 Discourse에 게시할 때 주제의 작성자를 설정하는 데 사용됩니다.
Discourse 사용자 이름 수정 가능
관리자가 아닌 사용자가 자신의 프로필에서 자신의 Discourse 사용자 이름을 수정할 수 있는지를 결정합니다. Discourse 사용자 이름은 게시물을 Discourse에 게시할 때 주제의 작성자를 설정하는 데 사용됩니다.
직접 데이터베이스 게시 플래그
이 설정은 특수한 WordPress 환경을 가진 특정 설정에서 사용됩니다. 이 설정이 무엇을 하는지 알지 않는 한 사용하지 마세요.
상세 게시 로그
이 설정을 활성화하면 Discourse에 게시된 모든 게시물이 성공하더라도 WP Discourse 로그에 기록됩니다. 일반적으로 오류만 기록됩니다.
XMLRPC를 통한 게시 활성화
XML-RPC는 블로그 소프트웨어가 WordPress로 게시물을 보내는 데 자주 사용되는 원격 절차 호출(RPC)입니다. 이 절차를 사용하는 앱에는 wordpress.com 블로그 앱이 포함됩니다.
기본적으로 WP Discourse는 XML-RPC를 통해 생성된 게시물을 Discourse에 게시하지 않습니다. 그 이유는 블로그 소프트웨어를 통해 게시된 게시물이 Discourse에 게시되도록 의도되었는지 여부를 나타내는 좋은 방법이 없기 때문입니다.
블로그 소프트웨어를 사용하여 Discourse에 직접 게시될 게시물을 생성하려면, 테마의 functions.php 파일에 wp_discourse_before_xmlrpc_publish 필터에 연결하는 코드를 추가해야 합니다. wp_discourse_before_xmlrpc_publish 필터는 필터에 연결된 함수에 두 개의 인자를 전달합니다. 첫 번째 인자인 $publish_to_discourse는 XML-RPC 게시를 비활성화하기 위해 false로 설정된 불리언 값입니다. 두 번째 인자는 post 객체입니다.
모든 XML-RPC 게시물이 Discourse에 자동으로 게시되도록 하려면 항상 true를 반환하는 함수를 작성해야 합니다. 다음과 같은 코드를 사용하세요:
경고: 이 경우 XML-RPC를 통해 게시된 모든 게시물이 Discourse에 게시되며, 블로그 소프트웨어에서 수정된 오래된 게시물도 포함됩니다.
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish', 10, 2 );
function my_namespace_xmlrpc_publish( $publish_to_discourse, $post ) {
return true;
}
게시물 태그별 XML-RPC 게시물 필터링
wordpress.com 블로그 앱은 게시물에 태그를 추가할 수 있습니다. 태그는 게시물이 Discourse에 게시될지 여부를 제어하는 데 사용할 수 있습니다. ‘discourse’ 태그가 있는 게시물만 게시하려면 다음과 같은 코드를 사용하세요:
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish_by_tag', 10, 2 );
function my_namespace_xmlrpc_publish_by_tag( $publish_to_discourse, $post ) {
if ( has_tag( 'discourse', $post ) ) {
return true;
}
return false;
}
이 방법을 사용하되 게시된 게시물에 discourse 태그가 표시되지 않도록 하려면, 다음과 같은 코드를 사용하여 태그를 제거할 수 있습니다:
add_filter( 'term_links-post_tag', 'my_prefix_remove_discourse_tag' );
function my_prefix_remove_discourse_tag( $tags ) {
foreach( $tags as $key => $value ) {
if ( strpos( $value, 'discourse' ) ) {
unset( $tags[ $key ] );
}
}
return $tags;
}
게시물 날짜별 XML-RPC 게시물 필터링
특정 날짜 이후에 게시된 게시물만 XML-RPC를 통해 Discourse에 게시되도록 하려면, functions.php 파일에 다음과 같은 코드를 추가하세요. 이 코드는 2016년 1월 1일 이후에 게시된 모든 게시물이 Discourse에 게시되도록 허용합니다.
add_filter('wp_discourse_before_xmlrpc_publish', 'my_namespace_xmlrpc_publish_by_date', 10, 2 );
function my_namespace_xmlrpc_publish_by_date( $publish_to_discourse, $post ) {
if ( strtotime( $post->post_date ) > strtotime( '2016-01-01') ) {
return true;
}
return false;
}
할 일: 수정된 게시물이 아닌 새 게시물만 XML-RPC를 통해 게시할 수 있도록 wp-discourse 플러그인에 필터를 추가.
사용자 정의 게시물 유형에 대한 사용 가능한 카테고리 필터링
Discourse 카테고리가 WordPress admin/post-new 페이지의 Discourse에 게시 메타 박스에 표시되기 전에, WordPress 필터 'wp_discourse_publish_categories'가 적용됩니다. 이 필터에는 Discourse 카테고리 배열과 현재 게시물이 인자로 전달됩니다. 이를 테마의 functions.php 파일에서 특정 게시물 유형에 대해 사용 가능한 카테고리를 제한하는 데 사용할 수 있습니다.
다음은 'acme_product' 게시물 유형을 생성한 후, 해당 유형의 게시물에 대해 Discourse 카테고리 'fun’과 'scratch’를 게시 메타 박스에 표시되도록 반환하는 예시입니다.
// 게시물 유형 생성.
add_action( 'init', 'my_namespace_create_post_type' );
function my_namespace_create_post_type() {
register_post_type( 'acme_product',
array(
'labels' => array(
'name' => __( 'Products' ),
'singular_name' => __( 'Product' )
),
'public' => true,
'supports' => array( 'title', 'editor', 'comments', 'custom-fields' ),
'has_archive' => true,
'show_in_rest' => true,
)
);
}
// 'acme_product' 게시물 유형에 대한 사용 가능한 카테고리 필터링.
add_filter( 'wp_discourse_publish_categories', 'my_namespace_filter_categories', 10, 2 );
function my_namespace_filter_categories( $categories, $post ) {
if ( 'acme_product' === get_post_type( $post ) ) {
$output = [];
foreach ( $categories as $category ) {
if ( 'fun' === $category['name'] || 'scratch' === $category['name'] ) {
$output[] = $category;
}
}
return $output;
}
return $categories;
}
특정 게시물 유형에 특정 카테고리를 엄격하게 적용하려면(즉, 1:1 매핑), wpdc_publish_post_category를 사용해야 합니다.
function wpdc_change_post_category( $category, $post_id ) {
if ( 'acme_product' === get_post_type( $post ) ) {
$categories = WPDiscourse\Utilities\Utilities::get_discourse_categories();
$fun_category = array_search( 'fun' , array_column( $categories, 'name' ));
return $fun_category;
} else {
return $category;
}
}
add_filter( 'wpdc_publish_post_category', 'wpdc_change_post_category' );
연결된 Discourse 주제의 메타데이터 표시
게시 설정을 구성한 후에는 템플릿 커스터마이징을 사용하여 Discourse 주제에 대한 메타데이터를 표시할 수 있습니다.
먼저 수정할 템플릿을 결정해야 합니다. 예를 들어, 주제 메타데이터만 표시하고 댓글을 답변으로 표시하지 않으려면 no_replies 템플릿을 수정해야 합니다.
템플릿을 선택한 후에는 Discourse 주제 메타데이터를 추가하도록 수정할 수 있습니다. 코드가 무엇을 하는지 설명하는 주석이 포함된 스니펫은 다음과 같습니다.
// 선호하는 방법으로 wp-discourse가 존재하는지 확인,
// 예: https://wordpress.stackexchange.com/questions/127818/how-to-make-a-plugin-require-another-plugin
// wp-discourse 플러그인의 플러그인 유틸리티를 포함
require_once ABSPATH . 'wp-content/plugins/wp-discourse/lib/plugin-utilities.php';
use WPDiscourse\Shared\PluginUtilities;
// 플러그인 유틸리티를 쉽게 포함할 수 있도록 주제 메타데이터 템플릿을 클래스로 캡슐화
class DiscourseTopicMetadata {
// 클래스에 wp 플러그인 유틸리티 포함
use PluginUtilities;
public function __construct() {
// 클래스 초기화 시 템플릿 필터 추가
add_filter( 'discourse_no_replies_html', array( $this, 'topic_metadata_html' ) );
}
function topic_metadata_html( $input ) {
// 게시물 메타데이터에서 discourse 영구 링크 가져오기
$discourse_permalink = get_post_meta( get_the_ID(), 'discourse_permalink', true );
// 플러그인 유틸리티의 헬퍼 메서드를 사용하여 인증을 처리하면서 discourse 영구 링크를 이용해 Discourse에서 주제 JSON 가져오기
$topic = $this->get_discourse_topic($discourse_permalink);
// 표시하려는 주제 메타데이터를 포함하여 마크업 출력
ob_start();
?>
<div id="discourse-topic-meta">
<div class="views">
Views
<?php echo $topic->views; ?>
</div>
<div class="replies">
Replies
<?php echo $topic->reply_count; ?>
</div>
</div>
<?php
return ob_get_clean();
}
}
// 필터를 추가하기 위해 클래스 인스턴스화
new DiscourseTopicMetadata();
get_discourse_topic 응답에서 사용할 수 있는 주제 메타데이터에 대한 자세한 내용은 Discourse API Docs 을 참조하세요.

