Làm cách nào để hiển thị nội dung trang trong nguồn cấp dữ liệu?


13

Tôi muốn hiển thị toàn bộ nội dung của mỗi trang trong nguồn cấp dữ liệu. Tôi tìm kiếm nó và tìm thấy một số plugin nhưng tôi không thể giải quyết vấn đề của mình.

Tôi muốn khi tôi nhập http://swissaudio.com/craftsmanship/feednó cung cấp cho tôi nội dung trang trong nguồn cấp dữ liệu. Làm thế nào tôi có thể làm điều đó?


chỉ để chắc chắn, bạn đang hỏi liệu có hiển thị toàn bộ nội dung bài đăng của bạn trong nguồn cấp dữ liệu thay vì chỉ tóm tắt hoặc thêm tất cả các trang (post_type của trang) vào nguồn cấp dữ liệu đầy đủ không?
Majick

@majick Tôi muốn hiển thị tất cả nội dung của trang trong nguồn cấp dữ liệu. Tôi cũng sử dụng mã này nhưng thay đổi kết quả xảy ra 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

Thoạt nhìn có vẻ như nó sẽ hoạt động tốt, hãy đảm bảo bạn đã tắt bất kỳ plugin nào bạn đang kiểm tra và cũng vô hiệu hóa bất kỳ bộ nhớ cache nào trong khi kiểm tra.
Majick

@majick do công việc cung cấp mã trên cho trang chủ. Vui lòng kiểm tra trang web này http://swissaudio.com/feed/Tôi muốn hiển thị nội dung của từng trang trong nguồn cấp dữ liệu, ví dụ như craftsmanshiptrang tôi muốn làm một cái gì đó như thế này http://swissaudio.com/craftsmanship/feed/nhưng nó không hiển thị kết quả
raxa

3
điều này đã được chứng minh là rất khó khăn Tôi đã thử nghiệm thêm một vài điều mà không có may mắn nên đã mở một tiền thưởng cho việc này vì tôi muốn tự mình biết giải pháp. :-)
Majick

Câu trả lời:


7

Đầu tiên hãy đặt loại bài đăng để hiển thị trên trang nguồn cấp dữ liệu chính tức là /feedsử dụng pre_get_postshook

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

Trên trang cá nhân, WordPress hiển thị nguồn cấp dữ liệu nhận xét, sau đó đặt nó falsevà hiển thị nội dung trang trong nguồn cấp dữ liệu.

$q->is_comment_feed = false;

Trong mẫu nguồn cấp dữ liệu WordPress gọi các cuộc the_excerpt_rss()gọi get_the_excerpt()để sử dụng excerpt_lengthbộ lọc thay đổi độ dài thành tối đa.

Ví dụ hoàn chỉnh: -

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 các ý kiến ​​mặc định là đúng. à chính nó đấy..! tốt, nó có vẻ có ý nghĩa nếu làm điều này /page/comments/feed/thực sự sẽ hiển thị các ý kiến ​​thay vào đó, bất kỳ ý tưởng làm thế nào để làm điều đó?
Majick

Vâng, tôi nghĩ rằng chúng ta cần thêm các quy tắc viết lại mới. Bởi vì WP không hỗ trợ nó theo mặc định, thay vào đó, nó hỗ trợ chuỗi truy vấn withoutcomments=1như được trả lời bởi cjbj. Tôi không giỏi trong việc viết lại URL: D
Sumit

1
không tốt với việc viết lại URL, quyết định chuyển nó và thêm hỗ trợ cho withcomments=1câu trả lời của tôi.
Majick

đối với bộ lọc độ dài đoạn trích, không nên kiểm tra get_option('rss_use_excerpt')không !get_option('rss_use_excerpt)vì nếu nó đã sai thì không cần bộ lọc độ dài đoạn trích, nó sẽ hiển thị toàn bộ nội dung. O_o
Majick

Chà tôi không chắc tại sao nhưng nếu bạn kiểm tra dòng này core.trac.wordpress.org/browser/tags/4.5/src/wp-includes/, trong mẫu thì nó không ảnh hưởng đến cài đặt này những gì nó giả sử để làm.
Sumit

4

Điều này có thể không lý tưởng, nhưng nó là một khởi đầu. Trước tiên, hãy đảm bảo rằng toàn bộ nội dung có trong nguồn cấp dữ liệu:

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

Sau đó, bạn sẽ thấy nguồn cấp dữ liệu đầy đủ tại url này

http://swissaudio.com/ccraft Skill/feed/?withoutcomments=1

Sau đó, bạn có thể sử dụng add_rewrite_ruleđể chuyển hướng khách truy cập từ / feed /. Xa lý tưởng, nhưng có lẽ là một khởi đầu cho người khác làm việc.


sử dụng return get_the_content_feed()sẽ tốt hơn vì nó cũng áp dụng the_contentcác bộ lọc ... nhưng thật không may, điều này tạo ra toàn bộ nội dung trong trường mô tả của nguồn cấp dữ liệu thay vì trên trường nội dung.
Majick

3

Như được đề cập bởi @Sumit, bạn cần tắt nguồn cấp nhận xét cho một trang (điều mà tôi thấy thực sự lạ vì các bình luận mặc định bị tắt trên các trang?) ... đây là những gì tôi đã kết thúc (cho phép nhận các nhận xét trang cho ăn với ?withcomments=1nếu muốn):

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

Nhưng để hiển thị nội dung trang, vì mẫu nguồn cấp dữ liệu thực sự kiểm tra rss_use_excerptđể quyết định hiển thị toàn văn hoặc tóm tắt (được đặt trên Cài đặt -> Trang đọc), nên điều này cần được ghi đè nếu bạn muốn hiển thị toàn bộ nội dung cho nguồn cấp dữ liệu trang ( để bạn có thể đặt tùy chọn chính thành bất cứ điều gì bạn thích cho bài viết.) Nếu không, bất cứ điều gì bạn làm, nội dung có thể kết thúc trong trường mô tả của nguồn cấp dữ liệu thay vì trường nội dung.

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

Và cuối cùng, để có được trường mô tả RSS để hiển thị một đoạn trích trang, bạn có thể phải làm điều này (về cơ bản là một bản sao wp_trim_excerptkhông có strip_shortcodes) - tốt, tôi đã làm nhưng dù sao cũng có thể là do một số hành vi mã ngắn kỳ lạ trên trang I đã thử nghiệm:

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

Ồ tôi thực sự xin lỗi: DI đã mất trí Tôi đang đọc nó withoutcommentsbây giờ tôi XEM nó là withcomment: D LOL xóa bình luận của tôi;)
Sumit

không có probs này một trong những tâm trí của tôi chắc chắn hình dạng.
Majick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.