Cum să creezi fluxuri RSS suplimentare cu text integral

13 iul. 2011, 16:19:13
Vizualizări: 5.26K
Voturi: 4

Cu riscul de a părea complet ridicol, postez această întrebare aici deoarece natura cererii mele nu pare să mă ajute prea mult pe Google.

Fluxurile RSS implicite din WordPress folosesc rezumatul articolului. Acest flux este accesat prin www.domeniulmeu.com/feed

Am nevoie să creez un alt flux RSS care să conțină textul integral. Cum pot crea un flux RSS suplimentar (care este privat/accesibil doar de persoane de încredere)? De preferat folosind o funcție, dar un plugin (ca ultimă soluție).

0
Toate răspunsurile la întrebare 2
3

Iată cum să creezi un feed personalizat:

mai întâi creează un fișier nou în directorul temei tale, numește-l your-custom-feed.php și pune acest cod în interior

<?php

     /**
      * Feed RSS personalizat.
      *
      * @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>

apoi adaugă o funcție simplă pentru a încărca acel fișier șablon folosind do_feed_$hook

//încarcă șablonul feed-ului
function create_my_customfeed() {
    load_template( TEMPLATEPATH . 'your-custom-feed.php'); 
}
add_action('do_feed_mycustomfeed', 'create_my_customfeed', 10, 1);

Acum când accesezi http://yoursite.com/?feed=mycustomfeed vei obține un feed cu text complet, indiferent de ce ai definit în administrarea WordPress.

Bonus

dacă dorești să creezi o regulă de rescriere pentru feed-ul tău personalizat, astfel încât URL-ul să poată fi:

http://yoursite.com/mycustomfeed.xml precum și http://yoursite.com/feed/mycustomfeed/

adaugă acest cod în fișierul functions.php:

//creează regulă de rescriere pentru feed

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;
}
13 iul. 2011 18:34:15
Comentarii

Mulțumesc pentru acest tutorial minunat. Când creez fișierul (full-feed.php) și îl apelez la mysite.com/?feed=full-feed primesc următoarea eroare

ERROR: full-feed is not a valid feed template.

swordfish81 swordfish81
14 iul. 2011 06:42:08

trebuie să modifici hook-ul și numele fișierului în cod

Bainternet Bainternet
14 iul. 2011 06:55:42

ahh, greșeala mea. Am rezolvat. Dar verific feed-ul și încă afișează doar câteva rânduri din fiecare post??

swordfish81 swordfish81
14 iul. 2011 07:21:57
2

Încearcă ceva de genul acesta (netestat, simplificat dintr-un cod mai complex):

add_feed('full', 'full_feed');

function full_feed() {

    add_filter('pre_option_rss_use_excerpt', '__return_zero');
    load_template( ABSPATH . WPINC . '/feed-rss2.php' );
}
13 iul. 2011 18:35:54
Comentarii

Desigur, presupun că acest cod se adaugă în functions.php, dar care fișier trebuie apelat? Există deja un /feed care merge implicit cu excerpt-ul obișnuit. Deci trebuie un alt fișier sau un alt nume care trebuie apelat??

swordfish81 swordfish81
14 iul. 2011 07:28:50

@Sledge81 primul argument al add_feed() este slug-ul feed-ului creat. Deci acest feed suplimentar va fi disponibil la /feed/full sau ?feed=full (prima variantă depinde dacă ai permalink-uri frumoase activate).

Rarst Rarst
14 iul. 2011 08:49:01