Comment afficher le contenu d'une page dans un flux?

13

Je veux afficher tout le contenu de chaque page du flux. Je le recherche et j'ai trouvé un plugin mais je n'ai pas pu résoudre mon problème.

Je veux quand j'entre http://swissaudio.com/craftsmanship/feedil me fournit le contenu de la page dans le flux. Comment puis je faire ça?

raxa
la source
Pour être sûr, demandez-vous si vous souhaitez afficher l'intégralité du contenu de vos messages dans le flux plutôt qu'un simple résumé, ou ajouter toutes les pages (post_type de page) au flux dans son intégralité?
majick
@majick Je veux afficher tout le contenu de la page dans le flux. J'utilise également ce code mais le changement de résultat se produit 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
à première vue, il semble que cela devrait fonctionner correctement, assurez-vous d'avoir désactivé l'un des plugins que vous testiez et désactivez également les caches pendant le test.
majick
@majick en raison du travail de flux de code ci-dessus pour la page d'accueil .Veuillez vérifier ce site http://swissaudio.com/feed/Je veux afficher le contenu de chaque page dans le flux, c'est-à-dire que pour la craftsmanshippage, je voudrais faire quelque chose comme ça, http://swissaudio.com/craftsmanship/feed/mais cela ne donne aucun résultat
raxa
3
cela s'est avéré être très délicat. J'ai testé quelques autres choses sans succès, alors j'ai ouvert une prime pour cela car j'aimerais connaître la solution moi-même. :-)
majick

Réponses:

7

Définissez d'abord le type de publication à afficher sur la page principale du flux, c'est- /feedà- dire en utilisant le pre_get_postscrochet

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

Sur une page individuelle, WordPress affiche le flux de commentaires, puis configurez-le falseet affichez le contenu de la page dans le flux.

$q->is_comment_feed = false;

Dans le modèle de flux, les appels WordPress the_excerpt_rss()qui appellent get_the_excerpt()donc en utilisant un excerpt_lengthfiltre modifiez 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;
}
Sumit
la source
ahh les commentaires par défaut sont vrais. donc c'est tout..! eh bien, il semblerait logique de faire cela qui /page/comments/feed/montrerait les commentaires à la place, une idée de comment faire?
majick
Eh bien, je pense que pour cela, nous devons ajouter de nouvelles règles de réécriture. Parce que WP ne le prend pas en charge par défaut, il prend en charge la chaîne de requête withoutcomments=1comme l'a répondu cjbj. Je ne suis pas bon du tout en réécriture d'URL: D
Sumit
1
pas bon avec la réécriture d'URL non plus, withcomments=1j'ai décidé de le retourner et d'ajouter du support dans ma réponse.
majick
pour le filtre de longueur d'extrait, s'il ne coche get_option('rss_use_excerpt')pas !get_option('rss_use_excerpt)parce que s'il est déjà faux, un filtre de longueur d'extrait ne serait pas nécessaire, il afficherait déjà le contenu complet. O_o
majick
Eh bien, je ne sais pas pourquoi, mais si vous vérifiez cette ligne core.trac.wordpress.org/browser/tags/4.5/src/wp-includes/… dans le modèle, cela n'affecte pas ce paramètre, c'est pourquoi je le corrige simplement ce qu'il suppose de faire.
Sumit
4

Ce n'est peut-être pas 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 flux complet à cette URL

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

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

cjbj
la source
l'utilisation return get_the_content_feed()serait mieux car elle applique the_contentégalement des filtres ... mais malheureusement, cela renvoie le contenu complet dans le champ de description du flux plutôt que dans le champ de contenu.
majick
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 par défaut sont désactivés sur les pages?) ... c'est ce que j'ai fini par (permettant d'obtenir les commentaires de la page nourrir avec ?withcomments=1si 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, puisque le modèle de flux vérifie en fait rss_use_excerptde décider d'afficher le texte intégral ou le résumé (défini dans Paramètres -> Page de lecture), cela doit être remplacé 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 voulez pour les publications.) Sinon, quoi que vous fassiez, le contenu peut 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 obtenir le champ de description RSS pour afficher un extrait de page, vous devrez peut- être le faire (qui est essentiellement une copie de wp_trim_excerptsans strip_shortcodes) - enfin, je l'ai fait de toute façon, mais cela pourrait être dû à un comportement étrange de shortcode sur la page testait:

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;
}
majick
la source
Oh je suis vraiment désolé: DI a perdu la tête Je le lisais withoutcommentsmaintenant JE VOIS que c'est withcomment: D LOL en supprimant mes commentaires;)
Sumit
aucun problème celui-ci a certainement déformé mon esprit.
majick