Bagaimana cara menampilkan konten halaman dalam umpan?

13

Saya ingin menunjukkan seluruh konten dari setiap halaman di feed. Saya mencarinya dan menemukan beberapa plugin tetapi saya tidak bisa menyelesaikan masalah saya.

Saya ingin ketika saya memasukkannya http://swissaudio.com/craftsmanship/feedmemberi saya konten halaman di feed. Bagaimana saya bisa melakukan itu?

raxa
sumber
hanya untuk memastikan, apakah Anda bertanya apakah akan menampilkan seluruh konten posting Anda di feed daripada hanya ringkasan, atau untuk menambahkan semua halaman (post_type halaman) ke feed secara penuh juga?
Majick
@majick Saya ingin menampilkan semua konten halaman dalam feed. Saya menggunakan kode ini juga tetapi hasil perubahan terjadi 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
pada pandangan pertama sepertinya itu akan berfungsi dengan baik, pastikan Anda telah menonaktifkan salah satu plugin yang Anda uji dan juga menonaktifkan semua cache saat pengujian.
Majick
@majick karena pekerjaan umpan kode di atas untuk halaman rumah. Harap periksa situs ini http://swissaudio.com/feed/Saya ingin menunjukkan konten setiap halaman dalam umpan yaitu untuk craftsmanshiphalaman saya ingin melakukan sesuatu seperti ini http://swissaudio.com/craftsmanship/feed/tetapi tidak menunjukkan hasil
raxa
3
ini telah terbukti sangat rumit. Saya telah menguji beberapa hal lagi tanpa keberuntungan jadi membuka hadiah untuk ini karena saya ingin tahu solusinya sendiri. :-)
majick

Jawaban:

7

Pertama atur jenis posting untuk ditampilkan pada halaman umpan utama yaitu /feedmenggunakan pre_get_postshook

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

Pada setiap halaman WordPress menampilkan umpan komentar lalu mengaturnya falsedan menampilkan konten halaman dalam umpan.

$q->is_comment_feed = false;

Dalam template umpan, panggilan WordPress the_excerpt_rss()yang get_the_excerpt()menggunakan excerpt_lengthfilter mengubah panjangnya menjadi maks.

Contoh Lengkap: -

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;
}
Sumit
sumber
ahh komentar default menjadi true. jadi begitu ..! nah, sepertinya masuk akal jika melakukan ini yang /page/comments/feed/sebenarnya akan menunjukkan komentar sebagai gantinya, ada ide bagaimana melakukan itu?
Majick
Yah saya pikir untuk ini kita perlu menambahkan aturan penulisan ulang baru. Karena WP tidak mendukungnya secara default, Sebaliknya ia mendukung string kueri withoutcomments=1seperti dijawab oleh cjbj. Saya tidak bagus sama sekali dalam penulisan ulang URL: D
Sumit
1
juga tidak baik dengan penulisan ulang URL, memutuskan untuk memutarnya dan menambahkan dukungan untuk withcomments=1jawaban saya.
Majick
untuk filter panjang kutipan, jika tidak memeriksa get_option('rss_use_excerpt')bukan !get_option('rss_use_excerpt)karena jika sudah salah filter panjang kutipan tidak diperlukan, itu akan menampilkan konten lengkap. O_o
majick
Yah saya tidak yakin mengapa tetapi jika Anda memeriksa baris ini core.trac.wordpress.org/browser/tags/4.5/src/wp-includes/... dalam template itu tidak mempengaruhi pengaturan ini karena itulah saya hanya memperbaikinya apa yang seharusnya dilakukan.
Sumit
4

Ini mungkin tidak ideal, tetapi ini adalah awal. Pertama-tama pastikan bahwa konten lengkap ada di umpan:

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

Anda akan melihat feed lengkap di url ini

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

Anda kemudian dapat menggunakan add_rewrite_ruleuntuk mengarahkan pengunjung dari / feed /. Jauh dari ideal, tapi mungkin awal bagi orang lain untuk mengerjakannya.

cjbj
sumber
menggunakan return get_the_content_feed()akan lebih baik karena menerapkan the_contentfilter juga ... tapi sayangnya ini menampilkan konten lengkap di bidang deskripsi umpan di bidang konten.
Majick
3

Seperti yang disebutkan oleh @Sumit, Anda perlu mematikan umpan komentar untuk sebuah halaman (yang menurut saya aneh karena secara default komentar tidak aktif pada halaman?) ... inilah yang akhirnya saya dapatkan (memungkinkan untuk mendapatkan komentar halaman beri makan dengan ?withcomments=1jika diinginkan):

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;
    }
}

Tetapi untuk menampilkan konten halaman, karena template feed benar-benar memeriksa rss_use_excerptuntuk memutuskan apakah akan menampilkan teks lengkap atau ringkasan (ditetapkan pada Pengaturan -> Membaca halaman) maka ini perlu ditimpa jika Anda ingin konten lengkap ditampilkan untuk feed halaman ( sehingga Anda dapat mengatur opsi utama ke apa pun yang Anda suka untuk posting.) Kalau tidak, apa pun yang Anda lakukan, konten akan berakhir di bidang deskripsi umpan alih-alih bidang konten.

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;
}

Dan akhirnya, untuk mendapatkan kolom deskripsi RSS untuk menampilkan kutipan halaman, Anda mungkin harus melakukan ini (yang pada dasarnya adalah salinan wp_trim_excerpttanpa strip_shortcodes) - well, saya tetap melakukannya tetapi mungkin karena beberapa perilaku kode pendek yang aneh pada halaman I sedang menguji:

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;
}
majik
sumber
Oh, aku benar-benar minta maaf: DI telah kehilangan akal sehat, aku sedang membacanya withoutcommentssekarang aku MELIHAT itu adalah withcomment: D LOL menghapus komentar saya;)
Sumit
tidak ada masalah yang satu ini pasti menundukkan pikiran saya keluar dari bentuk.
Majick