如何在Feed中显示页面内容?


13

我想显示提要中每个页面的全部内容。我进行了搜索,发现了一些插件,但无法解决问题。

输入后http://swissaudio.com/craftsmanship/feed,我想 为我提供提要中的页面内容。我怎样才能做到这一点?


只是为了确定,您是否要询问是在Feed中显示帖子的全部内容,而不是仅显示摘要,还是将所有页面(页面的post_type)也全部添加到Feed中?
majick '16

@majick我想显示提要中页面的所有内容。我也使用此代码,但发生了结果更改 add_filter('request', 'feed_request'); function feed_request($qv){ $rss_post_types = array('post', 'page'); if(isset($qv['feed']) && !isset($qv['post_type'])) $qv['post_type'] = $rss_post_types; return $qv; }
raxa

乍看起来似乎应该可以正常工作,请确保您已禁用要测试的任何插件,并且在测试时也禁用了所有缓存。
majick '16

@majick由于上面的代码提要适用于主页。请检查此站点,http://swissaudio.com/feed/我想显示提要中每个页面的内容,craftsmanship例如,对于页面我想做这样的事情,http://swissaudio.com/craftsmanship/feed/但未显示任何结果
raxa

3
事实证明,这很棘手,我还没有运气就测试了更多东西,因此为此提供了很多帮助,因为我想自己了解解决方案。:-)
majick '16

Answers:


7

首先设置要显示在主供稿页面上的帖子类型,即/feed使用pre_get_posts挂钩

$q->set('post_type', array('post', 'page'));

WordPress在单个页面上显示注释提要,然后将其设置为false并显示提要中的页面内容。

$q->is_comment_feed = false;

在供稿模板WordPress中调用the_excerpt_rss()该调用,get_the_excerpt()因此使用excerpt_length过滤器将长度更改为最大。

完整的例子:

add_action('pre_get_posts', 'wpse_227136_feed_content');
/**
 * Set post type in feed content and remove comment feed
 * @param type $q WP Query
 */
function wpse_227136_feed_content($q) {
    //Check if it main query and for feed
    if ($q->is_main_query() && $q->is_feed()) {
        //Set the post types which you want default is post
        $q->set('post_type', array('post', 'page'));
    }

    //Check if it feed request and for single page 
    if ($q->is_main_query() && $q->is_feed() && $q->is_page()) {
        //Set the comment feed to false
        $q->is_comment_feed = false;
    }
}

add_filter( 'excerpt_length', 'wpse_227136_excerpt_length', 999 );
/**
 * Filter the except length to full content.
 *
 * @param int $length Excerpt length.
 * @return int $length modified excerpt length.
 */
function wpse_227136_excerpt_length( $length ) {
    if (is_feed() && !get_option('rss_use_excerpt')) {
        return PHP_INT_MAX;
    }

    return $length;
}

嗯,注释默认为true。就是这样了..!好吧,如果这样做/page/comments/feed/实际上会显示评论,那似乎很有意义,知道如何做到吗?
majick '16

好吧,我认为为此,我们需要添加新的重写规则。由于WP默认情况下不支持它,因此它支持withoutcomments=1cjbj回答的查询字符串。我不擅长所有URL重写:d
萨米特

1
URL重写也不太好,因此决定改掉它并withcomments=1在我的回答中添加对它的支持。
马吉克

为摘录长度过滤器,它应该不检查get_option('rss_use_excerpt')!get_option('rss_use_excerpt)因为如果是假的已经不被需要的摘录长度过滤器,它会显示已经全部内容。O_o
majick '16

好吧,我不确定为什么,但是如果您检查此行core.trac.wordpress.org/browser/tags/4.5/src/wp-includes / ...在模板中不会影响此设置,这就是为什么我要对其进行更正它应该做什么。
Sumit

4

这可能并不理想,但这只是一个开始。首先,请确保完整内容在Feed中:

function fullcontentfeed($content) {
    global $post;
    $content = $post->post_content;
    return $content;
    }
add_filter('the_excerpt_rss', 'fullcontentfeed');

然后,您应该在此网址上看到完整的提要

http://swissaudio.com/craftsmanship/feed/?withoutcomments=1

然后,您可以用于add_rewrite_rule从/ feed /重定向访问者。远非理想,但也许是其他人开始工作的起点。


使用return get_the_content_feed()会更好,因为它the_content也会应用过滤器...但是不幸的是,这会在Feed的description字段而不是content字段中输出全部内容。
majick '16

3

正如@Sumit所提到的,您需要关闭页面的评论供稿(由于默认情况下页面上的评论处于关闭状态,我觉得这很奇怪吗?)……这就是我最终的目的(允许获取页面评论)?withcomments=1如果需要,则提供):

add_action('pre_get_posts', 'rss_page_feed_full_content');

function rss_page_feed_full_content($q) {
    // Check if it feed request and for single page
    if ($q->is_main_query() && $q->is_feed() && $q->is_page()) {
        //Set the comment feed to false
        $q->set('post_type', array('page'));
        // allow for page comments feed via ?withcomments=1
        if ( (isset($_GET['withcomments'])) && ($_GET['withcomments'] == '1') ) {return;}
        $q->is_comment_feed = false;
    }
}

但是对于显示页面内容,由于提要模板实际上会检查rss_use_excerpt以确定是显示全文还是摘要(在“设置”->“阅读页面”上设置),因此,如果要显示页面提要的全部内容,则需要覆盖此内容(这样您就可以将main选项设置为任何您喜欢的帖子。)否则,您执行的其他任何操作内容都可能会出现在供稿的description字段中,而不是content字段中。

add_filter('pre_option_rss_use_excerpt', 'page_rss_excerpt_option');

function page_rss_excerpt_option($option) {
    // force full content output for pages
    if (is_page()) {return '0';}
    return $option;
}

最后,要获得RSS描述字段显示页的摘录,你可能不得不这样做(这基本上是副本wp_trim_excerptstrip_shortcodes) -好了,无论如何,我是,但它可能是由于在页面上我一些奇怪的短代码的行为正在测试:

add_filter('the_excerpt_rss','rss_page_excerpt');

function rss_page_excerpt($excerpt) {
    if (is_page()) {
        global $post; $text = $post->post_content;
        // removed this line otherwise got blank
        // $text = strip_shortcodes( $text );
        $text = apply_filters( 'the_content', $text );
        $text = str_replace(']]>', ']]>', $text);
        $excerpt_length = apply_filters( 'excerpt_length', 55 );
        $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' );
        $excerpt = wp_trim_words( $text, $excerpt_length, $excerpt_more );
    }
    return $excerpt;
}

哦,我真的很抱歉:DI失去了我的念头,withoutcomments现在我正在阅读,我知道是withcomment:D LOL删除我的评论;)
Sumit Susing

这个人肯定不会使我变形。
马吉克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.