aio
4월 17, 2020, 8:36오전
1
사용 사례: 내 WordPress 게시물에 YouTube 링크가 있습니다. WordPress 게시물을 게시한 후 해당 Discourse 게시물에 YouTube 동영상이 자동으로 표시되도록 하려는 것입니다.
문제: 동기화 후 Discourse 게시물의 HTML이 다음과 같기 때문에 작동하지 않는 것 같습니다.
<p>https://www.youtube.com/watch?v=alJEZwwtQ3U</p>
<p></p> 태그를 제거해야만 YouTube 동영상이 성공적으로 표시됩니다.
즉, <p></p> 태그를 어떻게 제거할 수 있을까요? 수천 개의 게시물이 있을 수 있으므로 <p></p> 태그를 수동으로 제거하는 것은 원치 않습니다.
functions.php 파일에서 직접 <p></p> 태그를 제거할 수 있는지 확실하지 않습니다.
귀하의 커스터마이징 튜토리얼을 따랐습니다. functions.php에 있는 코드는 다음과 같습니다.
// Discourse에 게시되는 게시물에 대표 이미지를 추가합니다.
function my_namespace_publish_format( $input ) {
ob_start();
?>
{excerpt} **<-----여기서 p 태그를 제거할 수 있나요?>
<?php
$output = ob_get_clean();
// 참고: 원래 함수에 있던 apply_filters() 호출은 제거되었습니다.
return $output;
}
add_filter( 'discourse_publish_format_html', 'my_namespace_publish_format' );
simon
4월 18, 2020, 12:42오전
2
비디오가 어떻게 게시되었는지에 따라, 다음과 같은 것을 사용할 수 있을 것입니다:
add_filter( 'discourse_publish_format_html', 'my_namespace_publish_format', 10, 2 );
function my_namespace_publish_format( $input, $post_id ) {
$post_content = apply_filters( 'the_content', get_post( $post_id )->post_content );
$videos = get_media_embedded_in_content( $post_content );
$video_string = '';
foreach( $videos as $video ) {
$video_string .= $video . '<br>';
}
ob_start();
echo '<small>Originally published at {blogurl}</small><br><br>';
echo $video_string;
echo '{excerpt}';
$output = ob_get_clean();
return $output;
}
비디오가 WordPress 사이트에 임베드되어 있다면 이 방법이 작동해야 합니다. 포맷을 올바르게 맞추려면 시행착오가 필요할 수 있습니다. 제가 겪은 주요 문제는 YouTube iframe 태그 앞에 공백이 있으면 Discourse가 이를 코드로 해석한다는 점이었습니다.
이 방법이 당신의 사이트에서 작동하지 않는다면 알려주세요.
제가 작동하게 하고 싶은 것은 사용자가 Discourse에서 WordPress 게시물을 확장하기 위해 “Show Full Post” 버튼을 클릭할 때 YouTube 비디오가 표시되도록 하는 것입니다. 이것이 가능한지 확신은 없습니다.
aio
4월 18, 2020, 5:34오후
3
시몬, 안녕
답장 주셔서 감사합니다. 정말 큰 도움이 되었습니다.
하지만 여전히 작동하지 않는 것 같습니다.
출력 결과는 다음과 같았습니다.
<small>원문 게시 주소: http://staging.a1.sg/matrix/</small><br><br><iframe title="GCE O-Level
A-Maths: Matrix & its Inverse" width="525" height="394"
src="https://www.youtube.com/embed/alJEZwwtQ3U?feature=oembed" frameborder="0"
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>.
</iframe><br><p><iframe title="GCE O-Level A-Maths: Matrix & its Inverse" width="525"
height="394" src="https://www.youtube.com/embed/alJEZwwtQ3U?feature=oembed" frameborder="0"
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>.
</iframe></p>
위에서 제안된 해결책을 시도한 후, 유튜브 링크가 문자열로 유지되도록 functions.php 파일에 추가 코드를 넣었습니다.
remove_shortcode( 'embed' );
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'autoembed' ], 8 );
remove_filter( 'the_content', [ $GLOBALS['wp_embed'], 'run_shortcode' ], 8 );
remove_action( 'edit_form_advanced', [ $GLOBALS['wp_embed'], 'maybe_run_ajax_cache' ] );
하지만 출력 결과(아래 참조)에는 < p > 태그가 여전히 포함되어 있습니다. 앞서 언급했듯이, discourse 게시물 내의 < p > 태그가 문제를 일으키고 있습니다.
<small>원문 게시 주소: http://staging.a1.sg/matrix/</small><br><br>.
<p>https://www.youtube.com/watch?v=alJEZwwtQ3U</p>
즉, p 태그를 제거하면 discourse에서 링크가 자동으로 임베드됩니다. 하지만 여전히 수동으로 처리해야 하는 상황입니다.
aio
4월 18, 2020, 5:43오후
4
혹시 discourse에서 구글 시트의 데이터를 활용해 게시물을 일괄 생성할 수 있는 방법이 있나요?
이렇게 하면 워드프레스를 사용하지 않아도 될 것 같습니다.
워드프레스에서 이와 유사한 기능을 제공하는 것이 wpallimport.com입니다.
simon
4월 18, 2020, 6:48오후
5
aio:
하지만 작동하지 않는 것 같습니다.
첫 번째 코드 예제의 출력이 제가 기대했던 것과 비슷해 보입니다. 문제는 Discourse의 allowed iframes 사이트 설정에 https://www.youtube.com/embed를 추가해야 한다는 것입니다. 이렇게 하면 게시물의 마크업에 포함된 iframe이 Discourse에서 비디오 플레이어 olarak 표시될 수 있습니다.
aio
4월 19, 2020, 3:21오전
6
완벽하게 작동합니다!!! 감사합니다!!!
하지만 임베드가 하나 대신 두 개 표시됩니다.
아래가 출력 결과입니다. 제가 제안한 코드에 문제가 있는 건가요?
<small>Originally published at http://staging.a1.sg/beautiful/</small><br><br><iframe src="https://www.youtube.com/embed/alJEZwwtQ3U" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe><br><p><iframe src="https://www.youtube.com/embed/alJEZwwtQ3U" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
add_filter( 'discourse_publish_format_html', 'my_namespace_publish_format', 10, 2 );
function my_namespace_publish_format( $input, $post_id ) {
$post_content = apply_filters( 'the_content', get_post( $post_id )->post_content );
$videos = get_media_embedded_in_content( $post_content );
$video_string = '';
foreach( $videos as $video ) {
$video_string .= $video . '<br>';
}
ob_start();
echo '<small>Originally published at {blogurl}</small><br><br>';
echo $video_string;
echo '{excerpt}';
$output = ob_get_clean();
return $output;
simon
4월 19, 2020, 4:38오후
7
지금 커스텀 템플릿을 사용하지 않고 게시물을 게시해 볼 수 있을까요? 아마 allowed iframes 사이트 설정에 https://www.youtube.com/embed 을 추가하는 것만으로 해결되었을 수 있습니다.
WordPress 사이트에서 어떤 편집기를 사용하고 있나요? 기존 Classic Editor를 사용 중인지, 아니면 새로운 Block Editor를 사용 중인가요? 또한 Discourse에 전체 게시물을 게시하고 있는지, 아니면 발췌문만 게시하고 있나요?
CSV 파일에서 게시물을 게시하는 작은 스크립트를 작성하여 이를 수행할 수 있습니다.
Canapin
(Coin-coin le Canapin)
4월 20, 2020, 2:10오후
9
가장 빠른 방법은 CSS로 숨기는 것일 것 같아요.
simon
4월 20, 2020, 4:23오후
10
토픽 제목 아래에 워드프레스 도메인으로 연결되는 링크가 표시되는 것을 방지하려면, WP Discourse Publishing 설정 페이지에서 “Add Featured Links” 옵션의 선택을 해제하세요. 이미 게시된 게시물에서 해당 링크를 제거하려면, CSS로 링크를 숨기거나 Discourse 사이트 데이터베이스에서 직접 제거할 수 있습니다. 앞으로 며칠 동안 직장에 출근하지 않지만, 수요일에 출근하면 그 작업을 대신 처리해 드리겠습니다.
수요일까지 기다릴 수 있다면 이 작업에 도움을 드릴 수 있습니다. 그보다 빨리 처리해야 한다면, CSV 파일에서 API를 통해 토픽을 생성하는 방법에 대해 질문하는 새로운 토픽을 Support 카테고리에 작성해 보시는 것을 권장합니다.