피드에 페이지 내용을 표시하는 방법은 무엇입니까?


13

피드에있는 모든 페이지의 전체 내용을 표시하고 싶습니다. 검색하고 플러그인을 찾았지만 문제를 해결할 수 없습니다.

입력 http://swissaudio.com/craftsmanship/feed할 때 피드의 페이지 컨텐츠를 제공 하고 싶습니다 . 어떻게해야합니까?


단지 요약이 아닌 피드에 게시물의 전체 콘텐츠를 표시 할 것인지 또는 모든 페이지 (post_type of page)를 피드에 완전히 추가 할 것인지를 묻는 것입니까?
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

먼저 게시물 유형을 기본 피드 페이지에 표시하도록 설정하십시오 (예 : 후크 /feed사용)pre_get_posts

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

개별 페이지에서 WordPress는 메모 피드를 false표시 한 다음 피드로 설정하고 페이지 내용을 피드에 표시합니다.

$q->is_comment_feed = false;

피드 템플릿에서 필터를 사용하여 호출 the_excerpt_rss()하는 WordPress 호출 은 길이를 최대로 변경합니다.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을 다시 작성하는 것도 좋지 않고 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.