我正在尝试实现一个自定义RSS提要,它是为播客格式化的,并从高级自定义字段中提取音频文件。基本上,我一直在研究这里提供的示例:https://css-tricks.com/roll-simple-wordpress-podcast-plugin/
我的插件如下所示:
// add a custom RSS feed
function podcast_rss(){
add_feed(\'podcast\', \'run_podcast_rss\');
}
add_action(\'init\', \'podcast_rss\');
function run_podcast_rss(){
require_once( dirname( __FILE__ ) . \'/feed-template.php\' );
}
这看起来很简单,但当我在浏览器中导航到新的提要URL时(
http://example.com/feed/podcast/) 浏览器尝试下载文件。在Google Chrome中,控制台显示
Resource interpreted as Document but transferred with MIME type application/octet-stream: "http://example.com/feed/podcast/".
在Firefox中,当它试图下载文件时,它告诉我这是一个DMS文件。
我尝试过清除缓存,检查代码中的错误,检查。htaccess用于奇数设置,设置标题;似乎没有什么影响。事实上,我可以注释掉require\\u once行,然后简单地尝试回显纯文本。它仍然强制下载。我把它放在不同的服务器上,它的行为是一样的。
我觉得这很简单,但我没有主意。有什么帮助吗?
最合适的回答,由SO网友:eteubert 整理而成
您需要显式设置内容类型,否则WordPress默认为未知提要的八位字节流。
function run_podcast_rss(){
header( \'Content-Type: application/rss+xml; charset=\' . get_option( \'blog_charset\' ), true );
require_once( dirname( __FILE__ ) . \'/feed-template.php\' );
}
SO网友:wsizoo
正如@mrfolkblues指出的,您需要为feed\\u content\\u类型添加一个过滤器。下面的代码为我解决了文件下载问题。
代码信用@swissspidy。https://core.trac.wordpress.org/ticket/36334#comment:7
<?php
// Example B:
function trac_36334_add_superduperfeed() {
add_feed( \'superduperfeed\', \'trac_36334_superduperfeed_cb\' );
}
add_action( \'init\', \'trac_36334_add_superduperfeed\' );
function trac_36334_superduperfeed_cb() {
header( \'Content-Type: text/html\' ); // or any other content type
echo \'Do something...\';
}
function trac_36334_superduperfeed_type( $content_type, $type ) {
if ( \'superduperfeed\' === $type ) {
return feed_content_type( \'rss2\' );
}
return $content_type;
}
add_filter( \'feed_content_type\', \'trac_36334_superduperfeed_type\', 10, 2 );