web-dev-qa-db-fra.com

Comment afficher le contenu de la page dans le flux?

Je veux montrer tout le contenu de chaque page dans le fil. Je le cherche et trouve un plugin, mais je ne peux pas résoudre mon problème.

Je veux quand je saisis http://swissaudio.com/craftsmanship/feed, il me fournit le contenu de la page dans le fil. Comment puis je faire ça?

12
raxa

Commencez par définir le type de publication à afficher sur la page principale du flux, à savoir /feed à l'aide de pre_get_posts hook

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

Sur chaque page, WordPress affiche le fil de commentaire, puis réglez-le sur false et affichez le contenu de la page dans le fil.

$q->is_comment_feed = false;

Dans le gabarit de flux, WordPress appelle the_excerpt_rss() qui appelle get_the_excerpt() afin d'utiliser le filtre excerpt_length pour modifier la longueur à max.

Exemple complet: -

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

Ce n'est peut-être pas idéal, mais c'est un début. Tout d’abord, assurez-vous que tout le contenu est dans le flux:

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

Vous devriez alors voir le fil complet à cette URL

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

Vous pouvez ensuite utiliser add_rewrite_rule pour rediriger les visiteurs depuis/feed /. Loin d'être idéal, mais peut-être un début de travail pour quelqu'un d'autre.

4
cjbj

Comme mentionné par @Sumit, vous devez désactiver le flux de commentaires pour une page (ce que je trouve vraiment étrange car, par défaut, les commentaires sont désactivés sur les pages?) ... c'est ce que j'ai fini par obtenir (permettant d'obtenir les commentaires de la page nourrir avec ?withcomments=1 si désiré):

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

Mais pour afficher le contenu de la page, étant donné que le modèle de flux contrôle en fait rss_use_excerpt pour décider d'afficher le texte intégral ou le résumé (défini dans Paramètres -> Page de lecture), cette option doit être remplacée si vous souhaitez que le contenu complet s'affiche pour un flux de page. (afin que vous puissiez avoir l'option principale définie sur ce que vous préférez pour les publications.) Sinon, le contenu pourrait se retrouver dans le champ de description du flux au lieu du champ de contenu.

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

Et enfin, pour que le champ de description RSS affiche un extrait de page, vous pourriez devez le faire (ce qui est fondamentalement une copie de wp_trim_excerpt sans strip_shortcodes) - eh bien, je l’ai fait de toute façon, mais cela peut être dû à un problème comportement shortcode sur la page que je testais:

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