จะแสดงเนื้อหาของหน้าในฟีดได้อย่างไร?


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

ขั้นแรกให้ตั้งค่าประเภทโพสต์เพื่อแสดงบนหน้าฟีดหลักเช่น/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;
}

อ่าความคิดเห็นเริ่มต้นเป็นจริง ดังนั้นมัน .. ! ดูเหมือนว่าจะสมเหตุสมผลถ้าทำสิ่งนี้/page/comments/feed/จริง ๆ แล้วจะแสดงความคิดเห็นแทนความคิดวิธีการทำเช่นนั้น?
majick

ฉันคิดว่าสำหรับสิ่งนี้เราต้องเพิ่มกฎการเขียนใหม่ เนื่องจาก WP ไม่สนับสนุนโดยค่าเริ่มต้นจึงสนับสนุนสตริงแบบสอบถามwithoutcomments=1ตามที่ได้รับคำตอบจาก cjbj ฉันไม่เก่งเลยในการเขียน 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/ …ในเทมเพลตจะไม่มีผลกับการตั้งค่านี้นั่นคือสาเหตุที่ฉันเพิ่งแก้ไขมัน มันควรจะทำอะไร
Sumit

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) - ดีฉันทำต่อไป แต่อาจเป็นเพราะพฤติกรรมย่อบางอย่างผิดปกติในหน้าฉัน เป็นการทดสอบ:

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

ไม่มีปัญหานี้คนงอใจของฉันออกจากรูปร่างได้อย่างแน่นอน
majick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.