Cómo crear feeds RSS adicionales de texto completo en WordPress
Corriendo el riesgo de sonar completamente ridículo, publico esta pregunta aquí ya que la naturaleza de mi consulta no parece ayudarme mucho en Google.
Los feeds RSS por defecto de WordPress utilizan el extracto del post. Este feed se accede mediante www.midominio.com/feed
Tengo el requisito de crear otro feed RSS que muestre el texto completo. ¿Cómo puedo crear un feed RSS adicional (que sea privado/entregado solo a partes confiables)? Preferiblemente usando una función, pero un plugin como último recurso.
Aquí te mostramos cómo crear un feed personalizado:
Primero crea un nuevo archivo en el directorio de tu tema, nómbralo your-custom-feed.php
y coloca este código dentro:
<?php
/**
* Feed RSS personalizado.
*
* @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>
Luego añade una función simple para llamar ese archivo de plantilla usando do_feed_$hook
//cargar plantilla de feed
function create_my_customfeed() {
load_template( TEMPLATEPATH . 'your-custom-feed.php');
}
add_action('do_feed_mycustomfeed', 'create_my_customfeed', 10, 1);
Ahora cuando accedas a http://yoursite.com/?feed=mycustomfeed
obtendrás un feed de texto completo, sin importar lo que hayas definido en el administrador de WordPress.
Extra
Si deseas crear una regla de reescritura para tu feed personalizado para que tu URL pueda ser:
http://yoursite.com/mycustomfeed.xml
así como
http://yoursite.com/feed/mycustomfeed/
Añade este código a tu archivo functions.php:
//crear regla de reescritura para el 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;
}

Gracias por este brillante tutorial. Cuando creo el archivo (full-feed.php) y lo llamo mysite.com/?feed=full-feed obtengo el siguiente error
ERROR: full-feed is not a valid feed template.

Seguro, asumo que este código va en functions.php pero ¿qué archivo llamar? Ya existe un /feed que va por defecto con el extracto regular. Entonces, ¿se necesita otro archivo o nombre que se deba llamar?
