1. Code
  2. Game Development

Ampliar el feed RSS predeterminado de WordPress

Scroll to top

Spanish (Español) translation by Trix (you can also view the original English article)

Es posible que en ocasiones tengas que mejorar tu presencia online y llegar a una audiencia más amplia enviando tu contenido fuera de tu sitio web. Por ejemplo, podrías querer que tus entradas estén disponibles en la mayoría de agregadores de redes sociales, o en dispositivos móviles, o publicar podcasts de audio o vídeo en tiendas digitales.

En la mayoría de estos casos, es necesario personalizar la fuente RSS añadiendo metadatos personalizados para posibilitar su publicación.

En este tutorial veremos cómo lograr este objetivo para dos importantes plataformas: Flipboard e iTunes Store, pero el código también se puede personalizar fácilmente para otras plataformas y servicios web.


Introducción

Flipboard es una aplicación para agregar contenidos procedentes de redes sociales para dispositivos Android e iOS que periódicamente extrae contenido de tu sitio web y lo presenta en formato de revista de manera que tus usuarios móviles puedan leer tus noticias a través de la app instalada en sus smartphones o tabletas. iTunes Store es una tienda online de productos digitales en la que puedes publicar tus podcasts de audio o vídeo.

La suscripción a ambos servicios es gratuita pero sujeta a aprobación, especialmente en el caso de Flipboard, que sólo parece aceptar sitios web que cuenten con un cierto número de lectores.

Ambos te permiten publicar contenido a través del feed RSS de tu blog, pero esta debe cumplir con sus especificaciones. Por fortuna WordPress permite que los desarrolladores modifiquen la estructura predeterminada del feed RSS.


Paso 1 La estructura predeterminada del feed RSS de WordPress

Por defecto, WordPress viene con varios feeds. En este tutorial usaremos el feed RSS 2.0 disponible en http://example.com/?feed=rss2 o http://example.com/feed/ si es que estás usando permalinks. Este feed es un sencillo documento XML estructurado de la siguiente manera:

1
<?xml version="1.0" encoding="UTF-8"?>
2
<rss version="2.0"
3
  <!-- these are the namespaces -->
4
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
5
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
6
  xmlns:dc="http://purl.org/dc/elements/1.1/"
7
  xmlns:atom="http://www.w3.org/2005/Atom"
8
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
9
  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
10
>
11
12
	<channel>
13
		<!-- this is the head -->
14
		<title>Your Blog Title</title>
15
		<atom:link href="http://your-site-url.com/feed" rel="self" type="application/rss+xml" />
16
		<link>http://your-site-url.com</link>
17
		<description>your Blog Description</description>
18
		<lastBuildDate>Thu, 27 Sep 2012 18:30:06 +0000</lastBuildDate>
19
		<language>en-US</language>
20
		<sy:updatePeriod>hourly</sy:updatePeriod>
21
		<sy:updateFrequency>1</sy:updateFrequency>
22
		<generator>http://wordpress.org/?v=3.4.2</generator>
23
24
		<!-- this is the first post -->
25
		<item>
26
			<title>Post 1 Title</title>
27
			<link>http://your-site-url.com/post-1-slug</link>
28
			<comments>http://your-site-url.com/post-1-slug#comments</comments>
29
			<pubDate>Tue, 15 May 2012 13:47:12 +0000</pubDate>
30
			<dc:creator>John Doe</dc:creator>
31
			<category><![CDATA[Category 1]]></category>
32
			<guid isPermaLink="false">http://your-site-url.com/?p=1</guid>
33
			<description><![CDATA[Aliquam rutrum placerat aliquet. Maecenas congue felis erat]]></description>
34
			<content:encoded><![CDATA[<p>Aliquam rutrum placerat aliquet. Maecenas congue felis erat.</p>]]></content:encoded>
35
			<wfw:commentRss>http://your-site-url.com/post-1-slug/feed</wfw:commentRss>
36
			<slash:comments>0</slash:comments>
37
		</item>
38
39
		<!-- this is the second post -->
40
		<item>
41
			<title>Post 2 Title</title>
42
			<link>http://your-site-url.com/post-2-slug</link>
43
			<comments>http://your-site-url.com/post-2-slug#comments</comments>
44
			<pubDate>Tue, 15 May 2012 13:37:56 +0000</pubDate>
45
			<dc:creator>John Doe</dc:creator>
46
			<category><![CDATA[Category 1]]></category>
47
			<category><![CDATA[Category 2]]></category>
48
			<guid isPermaLink="false">http://your-site-url.com/?p=2</guid>
49
			<description><![CDATA[Aliquam rutrum placerat aliquet.]]></description>
50
			<content:encoded><![CDATA[<p>Aliquam rutrum placerat aliquet</p>]]></content:encoded>
51
			<wfw:commentRss>http://your-site-url.com/post-2-slug/feed</wfw:commentRss>
52
			<slash:comments>0</slash:comments>
53
		</item>
54
	</channel>
55
56
</rss>

Como puedes ver, cada elemento <item> representa una entrada y contiene varios subelementos, cada uno de ellos relacionado con ese “componente” entrada. Los principales son:

  • <title> es el título de la entrada
  • <link> es el permalink de la entrada
  • <pubDate> es la fecha de publicación de la entrada en formato RFC822
  • <dc:creator> es el nombre del autor de la entrada
  • <dc:category> es un subconjunto de elementos, uno para cada categoría de la entrada
  • <description> es el extracto de la entrada sin etiquetas HTML
  • <content:encoded> es el contenido completo de la entrada con etiquetas HTML

Paso 2 Personalizar el feed RSS para Flipboard

Según los requisitos técnicos de Flipboard, es posible mejorar el contenido.

proporcionando más elementos semánticos dentro del código del artículo, añadiendo la posibilidad de especificar citas, presentaciones de diapositivas ("slideshows"), y otros elementos de diseño

Estos elementos semánticos adicionales son:

  • Título y subtítulo
  • Citas
  • Recursos de imagen, vídeo y audio
  • Presentaciones de diapositivas ("slideshows")
  • Información geográfica

Podemos implementar estos elementos semánticos en nuestro feed RSS a través de un plugin. Como ya he mencionado, WordPress proporciona ganchos concretos que te permiten modificar la estructura predeterminada del feed RSS:

  • rss2_ns - permite añadir nuevos espacios de nombres o “namespaces” dentro del elemento raíz XML
  • rss2_head - permite añadir etiquetas en la cabecera del feed;
  • the_content_feed - permite modificar el contenido de cada entrada que aparece en le feed;
  • rss2_item - permite añadir nuevos subelementos a cada elemento <ítem> (post);

Crea un nuevo archivo llamado flipboard-feed.php, ábrelo en tu editor de texto favorito y pega este encabecezado de plugin:

1
<?php
2
/*

3
 * Plugin Name:   Flipboard RSS Feed

4
 * Plugin URI:    http://www.studio404.it

5
 * Description:   A plugin to customize the default RSS Feed according to Flipboard technical specifications.

6
 * Version:       1.0

7
 * Author:        Claudio Simeone

8
 * Author URI:    http://www.studio404.it

9
 */
10
?>

Copia el archivo en tu directorio /wp-content/plugins/ y actívalo desde la página de administración de plugins de tu WordPress.

Título y subtítulo

Si quieres añadir un título y un subtítulo justo antes del contenido de la entrada, tienes que añadir algo como esto:

1
<hgroup>
2
	<h1>Title of the Post</h1>
3
	<h2>This is the Post subtitle</h2>
4
</hgroup>

También podrías añadir esto manualmente en el contenido de la entrada, desde el editor de texto, pero no sería una solución ideal porque entonces estas etiquetas también se mostrarían en tu sitio web (a menos que ocultes el elemento hgroup a través de un estilo CSS). Por tanto, para automatizarlo y mostrarlo sólo en el feed RSS, es mejor usar el título de la entrada en el elemento <h1> y un campo personalizado para el subtítulo <h2>.

Si editas un página de entrada, añade un campo personalizado flipboard_subtitle.

Añade estas líneas a nuestro plugin Flipboard RSS Feed:

1
add_filter( 'the_content_feed', 'flipboard_title_and_subtitle' );
2
3
function flipboard_title_and_subtitle( $content ) {
4
	global $post;
5
	$post_subtitle = get_post_meta( $post->ID, 'flipboard_subtitle', TRUE );
6
	// add hgroup only if the Custom Field is set

7
	if ( $post_subtitle ) {
8
		$hgroup = '<hgroup><h1>' . $post->post_title . '</h1>';
9
		$hgroup .= '<h2>' . $post_subtitle . '</h2></hgroup>';
10
		return $hgroup . $content;
11
	} else {
12
		return $content;
13
	}
14
}

Ahora, si publicas la entrada y refrescas la página de tu feed RSS, verás la etiqueta hgroup justo antes del contenido de la entrada.

Extraer citas

Para extraer citas puedes usar en el contenido tu entrada la etiqueta <blockquote> para destacar algunas partes del texto. Podemos aprovechar el plugin para reemplazar <blockquote> por la etiqueta <aside>.

Añade estas líneas al plugin Flipboard RSS Feed:

1
add_filter( 'the_content_feed', 'flipboard_pull_quotes' );
2
3
function flipboard_pull_quotes( $content ) {
4
	// replace blockquote tag with aside

5
	return str_replace( 'blockquote>', 'aside>', $content );
6
}

Refresca la página de tu feed RSS, ahora verás la nueva etiqueta <aside>.

Imagen

Para todos estos elementos, seguiremos otro método sugerido por Flipboard: en lugar de colocar los elementos semánticos directamente en el contenido de la entrada, añadiremos un nuevo subconjunto de elementos RSS para medios dentro del elemento <item>.

Media RSS es una extensión RSS que mejora la publicación de archivos multimedia en los feeds RSS. Los archivos de imagen, vídeo y audio y sus metadatos pueden ser incluidos en feeds RSS gracias a sus elementos especiales.

En nuestro caso, usaremos el principal de todos ellos: <media:content>.

Además, también necesitamos la extensión GeoRSS para poder usar información geográfica, así que tenemos que añadir los namespaces al feed RSS para que sea válido.

Añade estas líneas a nuestro plugin Flipboard RSS Feed:

1
add_filter( 'rss2_ns', 'flipboard_namespace' );
2
3
function flipboard_namespace() {
4
	echo 'xmlns:media="http://search.yahoo.com/mrss/"

5
	xmlns:georss="http://www.georss.org/georss"';
6
}

Y el resultado será:

Ahora queremos añadir en nuestro feed RSS todas las imágenes adjuntadas a nuestras entradas. Tenemos que hacer algo como lo siguiente:

1
<item>
2
	<!-- Full item markup omitted for brevity -->
3
	<media:content type="image/jpeg" media="image" width="900" height="600" url="http://media.example.com/kitten-landscape.jpg">
4
		<media:description type="plain">An adorable kitten</media:description>
5
		<media:copyright>Carl Carlson</media:copyright>
6
	</media:content>
7
</item>

El elemento <media:content> admite dos subelementos: <media:description> es el pié de foto usado para la imagen y en WordPress es el título de la imagen, mientras que <media:copyright> contiene la información sobre los derechos de autor o los créditos del autor de la imagen.

Ahora, lo implementaremos en nuestro feed de WordPress. Crea una entrada y adjunta algunas fotos en ella (observa que las imágenes deben tener al menos 400px en su lado más corto):

Publica la entrada, después añade estas líneas en nuestro plugin Flipboard RSS Feed:

1
add_filter( 'rss2_item', 'flipboard_attached_images' );
2
3
function flipboard_attached_images() {
4
	global $post;
5
	$attachments = get_posts( array(
6
		'post_type' => 'attachment',
7
		'post_mime_type' => 'image',
8
		'posts_per_page' => -1,
9
		'post_parent' => $post->ID,
10
		'exclude' => get_post_thumbnail_id()
11
	) );
12
	if ( $attachments ) {
13
		foreach ( $attachments as $att ) {
14
			$img_attr = wp_get_attachment_image_src( $att->ID, 'full' );
15
			?>
16
			<media:content url="<?php echo $img_attr[0]; ?>" type="<?php echo $att->post_mime_type; ?>" medium="image" width="<?php echo $img_attr[1]; ?>" height="<?php echo $img_attr[2]; ?>">
17
				<media:description type="plain"><![CDATA[<?php echo $att->post_title; ?>]]></media:description>
18
				<media:copyright><?php echo get_the_author(); ?></media:copyright>
19
			</media:content>
20
			<?php
21
		}
22
	}
23
}

Refresca tu página de feed RSS, comprobarás como aparece ahora el elemento <media:content> para cada imagen adjuntada.

Una breve nota sobre el elemento <media:group>: puede usarse para proporcionar recortes y tamaños de la misma imagen, por ejemplo versiones en orientación vertical u horizontal.

Video

Para los archivos de vídeo Flipboard nos sugiere que usemos este código:

1
<media:content url="http://www.example.com/lisa-saxophone.mp4" type="video/mp4">
2
	<media:description type="plain">Lisa plays the saxophone</media:description>
3
	<media:thumbnail url="http://www.example.com/lisa-saxophone.jpg" width="200" height="200" />
4
	<media:copyright>Carl Carlson</media:copyright>
5
</media:content>

Aquí tenemos un nuevo subelemento: <media:thumbnail>: simplemente especifica una imagen de previsualización para el vídeo. Esto puede ser un poco confuso ya que necesitamos una forma de crear una conexión directa entre el vídeo adjuntado y su imagen de previsualización e indicarle a WordPress que los dos archivos están conectados. Podemos proceder de la siguiente forma:

  1. Añade una nueva entrada y adjunta en él uno o más vídeos o audios.
  2. En la página de la Biblioteca de medios, carga la imagen de previsualización para el vídeo, anota las dimensiones de la imagen y copia la URL del archivo.
  3. Localiza el vídeo en la Biblioteca de medios, edítalo y pega la URL de la imagen en el campo Descripción y añade también la anchura y la altura de la imagen, cada uno de ellos separados por el carácter “|”. Esto es necesario para establecer las dimensiones correctas de la imagen.

Ahora es el momento de colocar el vídeo en nuestro feed RSS. Añade estas líneas en nuestro plugin Flipboard RSS Feed:

1
add_filter( 'rss2_item', 'flipboard_attached_videos' );
2
3
function flipboard_attached_videos() {
4
	global $post;
5
	$attachments = get_posts( array(
6
		'post_type' => 'attachment',
7
		'post_mime_type' => 'video',
8
		'posts_per_page' => -1,
9
		'post_parent' => $post->ID,
10
		'exclude' => get_post_thumbnail_id()
11
	) );
12
	if ( $attachments ) {
13
		foreach ( $attachments as $att ) {
14
			$video_url = wp_get_attachment_url( $att->ID );
15
			$parts = explode( '|', $att->post_content );
16
			?>
17
			<media:content url="<?php echo $video_url; ?>" type="<?php echo $att->post_mime_type; ?>">
18
				<media:description type="plain"><![CDATA[<?php echo $att->post_title; ?>]]></media:description>
19
				<media:copyright><?php echo get_the_author(); ?></media:copyright>
20
				<media:thumbnail url="<?php echo $parts[0]; ?>" width="<?php echo $parts[1]; ?>" height="<?php echo $parts[2]; ?>" />
21
			</media:content>
22
			<?php
23
		}
24
	}
25
}

Y aquí tienes el resultado final:

Audio

El código de Flipboard para archivos de audio es:

1
<media:content url="http://www.example.com/bartman.mp3" fileSize="1000" type="audio/mpeg" >
2
	<media:description type="plain">Lisa plays the saxophone</media:description>
3
	<media:thumbnail url="http://www.example.com/lisa-saxophone.jpg" width="200" height="200" />
4
	<media:copyright>Carl Carlson</media:copyright>
5
</media:content>

Como puedes ver, es prácticamente idéntico al del video: así que adjunta la previsualización de la imagen al archivo de audio, podemos usar el mismo método que seguimos para los vídeos.

Así que, añade estas líneas a nuestro plugin:

1
add_filter( 'rss2_item', 'flipboard_attached_audio' );
2
3
function flipboard_attached_audio() {
4
	global $post; 
5
	$attachments = get_posts( array(
6
		'post_type' => 'attachment',
7
		'post_mime_type' => 'audio',
8
		'posts_per_page' => -1,
9
		'post_parent' => $post->ID,
10
		'exclude' => get_post_thumbnail_id()
11
	) );
12
	if ( $attachments ) {
13
		foreach ( $attachments as $att ) {
14
			$audio_url = wp_get_attachment_url( $att->ID );
15
			$parts = explode( '|', $att->post_content );
16
			$headers = get_headers( $audio_url, 1 );
17
			$filesize = $headers['Content-Length'];
18
			?>
19
			<media:content url="<?php echo $audio_url; ?>" fileSize="<?php echo $filesize; ?>" type="<?php echo $att->post_mime_type; ?>">
20
				<media:description type="plain"><![CDATA[<?php echo $att->post_title; ?>]]></media:description>
21
				<media:copyright><?php echo get_the_author(); ?></media:copyright>
22
				<media:thumbnail url="<?php echo $parts[0]; ?>" width="<?php echo $parts[1]; ?>" height="<?php echo $parts[2]; ?>" />
23
			</media:content>
24
			<?php
25
		}
26
	}
27
}

Pases de diapositivas (slideshows)

Para añadir todas las imágenes adjuntadas a una entrada mediante un slideshow debemos añadir un fragmento de código HTML en el contenido de la entrada del feed RSS:

1
<section class="fl-slideshow">
2
	<h1>My favorite animals</h1>
3
	<figure>
4
		<img src="puppy.jpg" width="1200" height="900">
5
		<figcaption>Puppies are cute</figcaption>
6
	</figure>
7
	<figure>
8
		<img src="kitten.jpg" width="900" height="1200">
9
		<figcaption>Kittens are too</figcaption>
10
	</figure>
11
	<figure>
12
		<img src="lamb.jpg" width="900" height="900">
13
		<figcaption>And baby sheep grow into ewe</figcaption>
14
	</figure>
15
</section>

Añade estas líneas a nuestro plugin:

1
add_filter( 'the_content_feed', 'flipboard_slideshow' );
2
3
function flipboard_slideshow( $content ) {
4
	global $post;
5
	$attachments = get_posts( array(
6
		'post_type' => 'attachment',
7
		'post_mime_type' => 'image',
8
		'posts_per_page' => -1,
9
		'post_parent' => $post->ID,
10
		'exclude'     => get_post_thumbnail_id()
11
	) );
12
	if ( $attachments ) {
13
		$slide = '<section class="fl-slideshow"><h1>' . $post->post_title . '</h1>';
14
		foreach ( $attachments as $att ) {
15
			$img_attr = wp_get_attachment_image_src( $att->ID, 'full' );
16
			$slide .= '<figure>

17
				<img src="' . $img_attr[0] . '" width="' . $img_attr[1] . '" height="' . $img_attr[2] . '">

18
				<figcaption>' . $att->post_title . '</figcaption>

19
			</figure>';
20
		}
21
		$slide .= '</section>';
22
		return $content . $slide;
23
	} else {
24
		return $content;
25
	}
26
}

Y este es el resultado:

Información geográfica

Para mostrar información geográfica podemos usar un campo personalizado tal y como hicimos para el subtítulo hgroup.

Así que, en la página de edición de tu entrada, añade un campo personalizado flipboard_geo y establece el valor con un formato similar a este: 45.256 -71.92 (puedes consultar una listado completo de las etiquetas válidas en la documentación GeoRSS).

Añade estas líneas al plugin Flipboard RSS Feed:

1
add_filter( 'the_content_feed', 'flipboard_geo' );
2
3
function flipboard_geo( $content ) {
4
	global $post;
5
	$flipboard_geo = get_post_meta( $post->ID, 'flipboard_geo', TRUE );
6
	if ( $flipboard_geo ) {
7
		$geo = '<georss:poin>' . $flipboard_geo . '</georss:point>';
8
		return $content . $geo;
9
	} else {
10
		return $content;
11
	}
12
}

Envía tu feed a Flipboard

Una vez tengas listo el feed RSS, podrás solicitarle a Flipboard que lo incluya en sus fuentes de noticias: tendrás que contactar con el equipo de Flipboard vía email, incluyendo la URL de tu feed RSS, Twitter, Facebook y detalles sobre el sitio web. El equipo revisará toda la información y te dará una respuesta transcurridos 5 días hábiles.


Paso 3 Personaliza el feed RSS para tus podcasts en iTunes

Para publicar nuestro podcast de audio o vídeo en iTunes de Apple, tenemos que formatear el feed RSS conforme a las especificaciones técnicas de iTunes mediante un nuevo plugin:

Crea un nuevo archivo llamado itunes-feed.php, ábrelo en tu editor de texto favorito y pega lo siguiente:

1
<?php
2
/*

3
 * Plugin Name:   iTunes RSS Feed

4
 * Plugin URI:    http://www.studio404.it

5
 * Description:   A plugin to customize the default RSS Feed according to iTunes technical specifications.

6
 * Version:       1.0

7
 * Author:        Claudio Simeone

8
 * Author URI:    http://www.studio404.it

9
 */
10
?>

Copia el archivo en tu directorio /wp-content/plugins y actívalo en la página de administración de Plugins de WordPress.

Namespace de iTunes

Para añadir el namespace de iTunes y compatibilidad sus meta etiquetas específicas, podemos usar el filtro rss2_ns:

1
add_filter( 'rss2_ns', 'itunes_namespace' );
2
3
// Add namespace

4
function itunes_namespace() {
5
	echo 'xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"';
6
}

Etiquetas de cabecera de iTunes

El siguiente paso consiste en añadir distintos datos que ayudarán a que iTunes categorice mejor tu feed en su tienda y que muestre información detallada sobre tu canal de podcast.

Podemos añadir toda esta información a través del filtro rss2_head:

1
add_filter( 'rss2_head', 'itunes_head' );
2
3
function itunes_head() {
4
	?>
5
	<itunes:subtitle>A show about everything</itunes:subtitle>
6
	<itunes:author>John Doe</itunes:author>
7
	<itunes:summary>All About Everything is a show about everything...</itunes:summary>
8
	<itunes:owner>
9
		<itunes:name>John Doe</itunes:name>
10
		<itunes:email>john.doe@example.com</itunes:email>
11
	</itunes:owner>
12
	<itunes:image href="http://example.com/podcasts/everything/AllAboutEverything.jpg" />
13
	<itunes:category text="Technology">
14
		<itunes:category text="Gadgets"/>
15
	</itunes:category>
16
	<?php
17
}

Para ser más breves en este tutorial, nuestro ejemplo es estático. Puedes codificar toda la información manualmente en el código fuente del plugin. Si prefieres hacerlo dinámico, puedes crear una Página de Opciones que gestione toda esta información (consulta también el artículo Handling Plugins Options in WordPress 2.8 with register_setting() de Ozh).

Etiquetas de entrada para iTunes

Para cada entrada, iTunes requiere el empleo de algunas etiquetas adicionales:

1
<itunes:author>John Doe</itunes:author>
2
<itunes:subtitle>A short primer on table spices</itunes:subtitle>
3
<itunes:summary>This week we talk about salt and pepper shakers...</itunes:summary>
4
<itunes:image href="http://example.com/podcasts/everything/AllAboutEverything/Episode1.jpg" />
5
<enclosure url="http://example.com/podcasts/everything/AllAboutEverythingEpisode3.m4a" length="8727310" type="audio/x-m4a" />
6
<guid>http://example.com/podcasts/archive/aae20050615.m4a</guid>
7
<itunes:duration>7:04</itunes:duration>
8
<itunes:keywords>salt, pepper, shaker, exciting</itunes:keywords>

Podemos gestionar parte de esta información de la siguiente manera:

  • author: usaremos el autor de la entrada
  • subtitle: usaremos el título del archivo adjunto de la entrada
  • summary: usaremos el pié de foto del archivo adjunto
  • duration: usaremos la descripción del adjunto
  • keywords: usaremos las etiquetas de la entrada

Escribe una nueva entrada, añade un título, algo de contenido y algunas etiquetas. Después, adjunta un archivo de audio a la entrada.

Después de subir el archivo, añade otra información: título, leyenda o pié de foto y usa el campo Descripción para especificar la duración.

Añade una imagen destacada para la entrada, y por último, publícala.

Ahora, añade estas líneas en nuestro plugin itunes-feed.php:

1
// add support for Post Thumbnails we will use for podcast covers

2
add_theme_support( 'post-thumbnails' );
3
4
// iTunes prefers square .jpg images that are at least 400 x 400 pixels

5
add_image_size( 'itunes-cover', 400, 400, true );
6
7
function itunes_attached_audio() {
8
	global $post;
9
	$attachments = get_posts( array(
10
		'post_type' => 'attachment',
11
		'post_mime_type' => 'audio', // if you use videos, change here

12
		'posts_per_page' => -1,
13
		'post_parent' => $post->ID,
14
		'exclude' => get_post_thumbnail_id()
15
	) );
16
17
	// use the post tags for itunes:keywords

18
	$itunes_keywords_arr = get_the_tags();
19
	if ( $itunes_keywords_arr ) {
20
		foreach( $itunes_keywords_arr as $tag ) {
21
			$itunes_keywords .= $tag->name . ',';
22
		}
23
		$itunes_keywords = substr_replace( trim( $itunes_keywords ), '', -1 );
24
	}
25
26
	// use the post thumb for itunes:image

27
	$post_thumbnail_id = get_post_thumbnail_id( $post->ID );
28
	$itunes_image_arr = wp_get_attachment_image_src( $post_thumbnail_id, 'itunes-cover' );
29
30
	if ( $attachments ) {
31
		foreach ( $attachments as $att ) {
32
			$audio_url = wp_get_attachment_url( $att->ID );
33
			$parts = explode( '|', $att->post_content );
34
			$headers = get_headers( $audio_url, 1 );
35
			$filesize = $headers['Content-Length'];
36
			?>
37
			<itunes:author><?php echo get_the_author(); ?></itunes:author>
38
			<itunes:subtitle><?php echo $att->post_title; ?></itunes:subtitle>
39
			<itunes:summary><?php echo $att->post_excerpt; ?></itunes:summary>
40
			<itunes:image href="<?php echo $itunes_image_arr[0]; ?>" />
41
			<enclosure url="<?php echo $audio_url; ?>" length="<?php echo $filesize; ?>" type="<?php echo $att->post_mime_type; ?>" />
42
			<guid><?php the_permalink(); ?></guid>
43
			<itunes:duration><?php echo $att->post_content; ?></itunes:duration>
44
			<itunes:keywords><?php echo $itunes_keywords; ?></itunes:keywords>
45
			<?php
46
		}
47
	}
48
}

Por último, publica la entrada y refresca la página de la fuente del feed RSS.


En conclusión

Aunque este tutorial cubre dos importantes plataformas, gracias a los ganchos de WordPress es posible personalizar el Feed RSS predeterminado y adaptarlo a otras aplicaciones web externas. Para cada entrada puedes adjuntar información adicional usando nuevas extensiones, o puedes mejorar el contenido de la entrada proporcionando código HTML adicional para adherirte a los requisitos de todas las plataformas en las que desees publicar tu contenido.


Referencias