web-dev-qa-db-fra.com

Comment créer des flux RSS en texte intégral supplémentaires

Au risque de paraître complètement ridicule, je poste cette question ici, car la nature de ma requête ne semble pas beaucoup m'aider de Google.

Mon flux rss wordpress default utilise le post-extrait. Ce flux est accessible via www.mondomaine.com/feed

J'ai l'obligation de créer un autre flux RSS en texte intégral. Comment créer un flux RSS supplémentaire (privé/réservé aux parties de confiance). Utilisez de préférence une fonction mais un plugin (en dernier recours)?

3
Sledge81

Voici comment créer un flux personnalisé:

commencez par créer un nouveau fichier dans le répertoire de votre thème, nommez-le your-custom-feed.php et mettez ce code à l'intérieur

<?php

     /**
      * custom RSS feed.
      *
      * @package WordPress
      */

     header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true);
     $more = 1;

    echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>

    <rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
        <?php do_action('rss2_ns'); ?>
    >

        <channel>
            <title><?php bloginfo_rss('name'); wp_title_rss(); ?></title>
            <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
            <link><?php bloginfo_rss('url') ?></link>
            <description><?php bloginfo_rss("description") ?></description>
            <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
            <language><?php echo get_option('rss_language'); ?></language>
            <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
            <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
            <?php do_action('rss2_head'); ?>
            <?php while( have_posts()) : the_post(); ?>
            <item>
                <title><?php the_title_rss() ?></title>
                <link><?php the_permalink_rss() ?></link>
                <comments><?php comments_link_feed(); ?></comments>
                <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
                <dc:creator><?php the_author() ?></dc:creator>
                <?php the_category_rss('rss2') ?>

                <guid isPermaLink="false"><?php the_guid(); ?></guid>
                <description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
            <?php if ( strlen( $post->post_content ) > 0 ) : ?>
                <content:encoded><![CDATA[<?php the_content_feed('rss2') ?>]]></content:encoded>
            <?php else : ?>
                <content:encoded><![CDATA[<?php the_excerpt_rss() ?>]]></content:encoded>
            <?php endif; ?>

                <wfw:commentRss><?php echo esc_url( get_post_comments_feed_link(null, 'rss2') ); ?></wfw:commentRss>
                <slash:comments><?php echo get_comments_number(); ?></slash:comments>
        <?php rss_Enclosure(); ?>
            <?php do_action('rss2_item'); ?>
            </item>
            <?php endwhile; ?>
        </channel>
    </rss>

puis ajoutez une fonction simple pour appeler ce fichier modèle en utilisant do_feed_$hook

//load feed template
function create_my_customfeed() {
    load_template( TEMPLATEPATH . 'your-custom-feed.php'); 
}
add_action('do_feed_mycustomfeed', 'create_my_customfeed', 10, 1);

Maintenant, lorsque vous accédez à http://yoursite.com/?feed=mycustomfeed, vous obtiendrez un flux de texte intégral, peu importe ce que vous définissez dans l'administrateur WordPress.

Prime

si vous souhaitez créer une règle de réécriture pour votre flux personnalisé, votre URL pourrait être:

http://yoursite.com/mycustomfeed.xml ainsi qu'un http://yoursite.com/feed/mycustomfeed/

ajoutez ce code à votre fichier functions.php:

// créer une règle de rewirte de flux

function custom_feed_rewrite($wp_rewrite) {
    $feed_rules = array('feed/(.+)' => 'index.php?feed=' . $wp_rewrite->preg_index(1),'(.+).xml' => 'index.php?feed='. $wp_rewrite->preg_index(1));
    $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}
5
Bainternet

Essayez quelque chose comme ceci (non testé, simplifié à partir de code plus complexe):

add_feed('full', 'full_feed');

function full_feed() {

    add_filter('pre_option_rss_use_excerpt', '__return_zero');
    load_template( ABSPATH . WPINC . '/feed-rss2.php' );
}
1
Rarst