Comment afficher le contenu de la page dans le flux?

12

Je souhaite afficher l'intégralité du contenu de chaque page du flux. Je le recherche et trouve un plugin, mais je ne parviens pas à résoudre mon problème.

Je souhaite que, lorsque j'entre http://swissaudio.com/craftsmanship/feed , le contenu de la page dans le flux me soit fourni. Comment puis-je faire cela?

    
posée raxa 19.05.2016 - 10:25

3 réponses

7

Définissez d'abord le type de publication à afficher sur la page de flux principale, à savoir /feed à l'aide de pre_get_posts hook

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

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

$q->is_comment_feed = false;

Dans le modèle de flux, WordPress appelle the_excerpt_rss() qui appelle get_the_excerpt() . Par conséquent, l'utilisation de excerpt_length filter modifie la longueur au maximum

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;
}
    
réponse donnée Sumit 21.05.2016 - 13:39
4

Cela peut ne pas être idéal, mais c’est un début. Assurez-vous d’abord que le contenu complet 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

enlace

Vous pouvez ensuite utiliser add_rewrite_rule pour rediriger les visiteurs de / feed /. Loin d’être idéal, mais peut-être un début sur lequel travailler.

    
réponse donnée cjbj 21.05.2016 - 13:45
3

Comme mentionné par @Sumit, vous devez désactiver le flux de commentaires pour une page (ce que je trouve vraiment étrange car les commentaires sont désactivés par défaut sur les pages?) ... voilà ce que j'ai finalement obtenu (permettant d'obtenir les commentaires de page sont alimentés avec ?withcomments=1 si vous le souhaitez):

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 vérifie réellement rss_use_excerpt pour 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 afficher le contenu complet. à afficher pour un flux de page (afin que vous puissiez définir l'option principale 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;
}

Enfin, pour que le champ de description RSS affiche un extrait de page, vous devrez peut-être faire ceci (ce qui est fondamentalement une copie de wp_trim_excerpt sans strip_shortcodes ). a fait de toute façon, mais cela pourrait être dû à un comportement bizarre de 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;
}
    
réponse donnée majick 22.05.2016 - 13:17

Lire d'autres questions sur les étiquettes