web-dev-qa-db-ja.com

ページコンテンツをフィードに表示する方法

私はそれを検索し、いくつかのプラグインを見つけましたが、私は私の問題を解決することができませんでした。

http://swissaudio.com/craftsmanship/feedと入力すると、フィードのページコンテンツが表示されます。どうやってやるの?

12
raxa

まず、メインフィードページに表示する投稿の種類、つまり/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;
}
7
Sumit

これは理想的ではないかもしれませんが、それは始まりです。まず、完全なコンテンツがフィードに含まれていることを確認してください。

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

あなたはそれからこのURLでフルフィードを見るべきです

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

その後、 add_rewrite_rule を使用して/ feed /から訪問者をリダイレクトできます。理想には程遠いですが、他の誰かが取り組むための出発点かもしれません。

4
cjbj

@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をチェックして全文または概要(設定->閲覧ページで設定)を表示するかどうかを決定するため、全コンテンツを表示する場合はこれをオーバーライドする必要がありますページフィードの場合(これにより、メインオプションを投稿の好きなものに設定できます。)そうしないと、コンテンツを実行する他のすべてが、コンテンツフィールドではなくフィードの説明フィールドに表示される可能性があります。

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の説明フィールドを取得してページの抜粋を表示するには、mightを実行する必要があります(基本的にはwp_trim_excerptのコピーで、strip_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;
}
3
majick