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


13

フィードのすべてのページのコンテンツ全体を表示したいのですが、それを検索してプラグインを見つけましたが、問題を解決できませんでした。

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


念のために、単に要約ではなくフィードの投稿のコンテンツ全体を表示するか、すべてのページ(ページのpost_type)を完全にフィードに追加するかを尋ねていますか?
majick

@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

@majickは上記のコードフィードがホームページで機能するため、このサイトhttp://swissaudio.com/feed/をチェックしてください。フィードの各ページのコンテンツを表示したい、つまり、craftsmanshipこのようなことをしたいページですがhttp://swissaudio.com/craftsmanship/feed/、結果は表示されません
raxa

3
これは非常にトリッキーであることが判明しました。私は幸運なしにさらにいくつかのことをテストしました。:-)
majick

回答:


7

まず、メインフィードページに表示するように投稿タイプを設定します。つまり/feedpre_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;
}

ahhコメントのデフォルトはtrueです。それだけです。まあ、/page/comments/feed/実際にコメントを表示するこれを行うと理にかなっているように思えますが、それを行う方法はありますか?
majick

それには、新しい書き換えルールを追加する必要があると思います。WPはデフォルトではサポートしていないため、代わりにwithoutcomments=1cjbjが回答したクエリ文字列をサポートしています。URLの書き換えはまったく得意ではありません:D
Sumit

1
URLの書き換えも苦手なので、それを好転させてwithcomments=1、私の回答にサポートを追加することにしました。
majick

抜粋長フィルターの場合、既に偽である場合、抜粋長フィルターは不要であるため、チェックしget_option('rss_use_excerpt')ない!get_option('rss_use_excerpt)と、コンテンツ全体が既に表示されます。O_O
majick

よくわからないのですが、この行を確認した場合、core.trac.wordpress.org / browser / tags / 4.5 / src / wp-includes /…テンプレートでこの設定に影響しないので、修正するだけです。それがすることを想定しています。
サミット

4

これは理想的ではないかもしれませんが、始まりです。最初に、完全なコンテンツがフィードにあることを確認します。

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 /から訪問者をリダイレクトするために使用できます。理想からはほど遠いが、他の誰かが取り組むためのスタートかもしれない。


を使用return get_the_content_feed()するとthe_contentフィルターも適用されるため、より適切になります...しかし、残念ながら、コンテンツフィールドではなくフィードの説明フィールドに完全なコンテンツが出力されます。
majick

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

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_excerptなしstrip_shortcodes) -まあ、私はとにかくやったが、それはページ上のいくつかの奇妙なショートの振る舞いが原因かもしれないIテストしていた:

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私はそれがあるSEE今withcomment:私のコメントを削除DのLOL;)
スミット

これは確かに私の心を形から崩した問題はありません。
majick
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.