aio
1
使用场景:我的 WordPress 帖子中包含 YouTube 链接。我希望在发布 WordPress 帖子后,自动将对应的 YouTube 视频显示在 Discourse 帖子中。
问题:似乎无法正常工作,因为同步后,Discourse 帖子的 HTML 为:
<p>https://www.youtube.com/watch?v=alJEZwwtQ3U</p>
只有当我移除 <p></p> 标签时,YouTube 视频才能成功显示。
那么我该如何移除 <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' );
1 个赞
simon
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 帖子时,能够显示 Youtube 视频。不过,我还不确定这是否可行。
1 个赞
aio
3
嗨,Simon
感谢你的回复。非常感激你的帮助。
但似乎不起作用。
输出结果是:
<small>Originally published at 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 文件中添加了一段额外的代码,以确保 YouTube 链接保持为字符串形式:
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' ] );
但输出结果(如下所示)仍然包含了
标签。如前所述,Discourse 帖子中的
标签正是导致问题的原因。
<small>Originally published at http://staging.a1.sg/matrix/</small><br><br>.
<p>https://www.youtube.com/watch?v=alJEZwwtQ3U</p>
也就是说,如果我移除
标签,链接会在 Discourse 上自动嵌入。但这仍然是一个手动过程。
aio
4
或者有没有办法在 Discourse 上批量创建帖子?使用来自 Google Sheets 的数据。
这样我就可以弃用 WordPress 了。
WordPress 中的对应工具是 wpallimport.com。
simon
5
您第一个代码示例的输出看起来接近我的预期。我认为问题在于您需要在 Discourse 的“允许的 iframe
3 个赞
aio
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
7
你现在可以尝试不使用自定义模板发布帖子吗?也许只需要在你的 Discourse 站点设置中的“允许的 iframe 来源”里添加 https://www.youtube.com/embed 即可。
你在 WordPress 网站上使用的是旧版经典编辑器,还是新版区块编辑器?另外,你是将整篇帖子发布到 Discourse,还是只发布摘要?
可以通过编写一个小脚本,从 CSV 文件发布帖子来实现这一功能。
1 个赞
simon
10
若要防止您的 WordPress 域名链接出现在主题标题下方,请在 WP Discourse 发布设置页面中取消选中“添加特色链接”选项。若要移除已发布帖子中的特色链接,可以通过 CSS 隐藏该链接,或从 Discourse 站点的数据库中将其删除。我接下来几天不在工作岗位,但可以在周三回到工作岗位后为您处理此事。
如果您能等到周三,我可以协助您完成此事。如果您需要在此之前完成,可以尝试在我们的 Support 类别中创建一个新主题,询问如何通过 API 从 CSV 文件创建主题。
2 个赞