Як відобразити вміст сторінки у стрічці?


13

Я хочу показати весь вміст кожної сторінки у стрічці. Я шукав її та знайшов якийсь плагін, але я не міг вирішити свою проблему.

Я хочу, щоб, коли я ввійшов, http://swissaudio.com/craftsmanship/feedнадає мені вміст сторінки у стрічці. Як я можу це зробити?


просто напевне, ви запитуєте, чи не показувати весь вміст ваших публікацій у стрічці, а не просто резюме, чи додати всі сторінки (пост_тип сторінки) також до каналу повністю?
1616

@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

на перший погляд схоже, що це повинно працювати нормально, переконайтеся, що ви відключили будь-який із плагінів, які ви тестували, а також вимкніть будь-які кеші під час тестування.
1616

@majick завдяки вищезазначеній роботі з подачею коду для домашньої сторінки. будь ласка, перевірте цей сайт. http://swissaudio.com/feed/Я хочу показати вміст кожної сторінки у стрічці, тобто для craftsmanshipсторінки. Я хотів би зробити щось подібне, http://swissaudio.com/craftsmanship/feed/але це не дає результату
raxa

3
це виявилося дуже хитро, я перевірив ще кілька речей, не пощастивши, тому відкрив для цього щедрість, тому що я хотів би сам знати рішення. :-)
майк

Відповіді:


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

ах коментарі за замовчуванням до true. так ось це ..! ну, здавалося б, має сенс, якщо робити це, що /page/comments/feed/насправді показуватиме коментарі, будь-яку ідею, як це зробити?
майк

Ну, я думаю, для цього нам потрібно додати нові правила перезапису. Оскільки WP не підтримує його за замовчуванням, натомість він підтримує рядок запитів withoutcomments=1, на яку відповів cjbj. Мені зовсім непогано в переписуванні URL-адрес: D
Суміт

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зараз Я ВИДАЮТЬ це withcomment: D LOL видаляє свої коментарі;)
Суміт

жоден пробник цього точно не виводив мою думку з форми.
майк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.