自定义RSS提要强制下载

时间:2016-03-22 作者:mrfolkblues

我正在尝试实现一个自定义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行,然后简单地尝试回显纯文本。它仍然强制下载。我把它放在不同的服务器上,它的行为是一样的。

我觉得这很简单,但我没有主意。有什么帮助吗?

2 个回复
最合适的回答,由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 );