Cómo agregar la imagen destacada de una entrada a una etiqueta de elemento RSS
Puedo agregar la imagen destacada de una entrada al feed RSS de esta manera:
function insertThumbnailRSS($content) {
global $post;
if(has_post_thumbnail($post->ID)){
$content = ''.get_the_post_thumbnail($post->ID, 'thumbnail', array('alt' => get_the_title(), 'title' => get_the_title(), 'style' => 'float:right;')).''.$content;
}
return $content;
}
add_filter('the_excerpt_rss', 'insertThumbnailRSS');
add_filter('the_content_feed', 'insertThumbnailRSS');
Sin embargo, al examinar el XML generado para el feed RSS, noté que coloca la imagen destacada dentro de la etiqueta de descripción del elemento XML.
¿Cómo puedo insertar la imagen destacada en su propia etiqueta de elemento RSS, como por ejemplo "image", en lugar de simplemente insertarla con el contenido de la entrada?

Puedes hacerlo agregando una acción al hook 'rss2_item' de la siguiente manera:
add_action('rss2_item', function(){
global $post;
$output = '';
$thumbnail_ID = get_post_thumbnail_id( $post->ID );
$thumbnail = wp_get_attachment_image_src($thumbnail_ID, 'thumbnail');
$output .= '<post-thumbnail>';
$output .= '<url>'. $thumbnail[0] .'</url>';
$output .= '<width>'. $thumbnail[1] .'</width>';
$output .= '<height>'. $thumbnail[2] .'</height>';
$output .= '</post-thumbnail>';
echo $output;
});

Basándome en la excelente respuesta de codekipple, aquí está mi implementación modificada, que utiliza el elemento válido de Media RSS media:content
(especificación) y verifica la existencia de una imagen en miniatura/imagen destacada:
function dn_add_rss_image() {
global $post;
$output = '';
if ( has_post_thumbnail( $post->ID ) ) {
$thumbnail_ID = get_post_thumbnail_id( $post->ID );
$thumbnail = wp_get_attachment_image_src( $thumbnail_ID, 'thumbnail' );
$output .= '<media:content xmlns:media="http://search.yahoo.com/mrss/" medium="image" type="image/jpeg"';
$output .= ' url="'. $thumbnail[0] .'"';
$output .= ' width="'. $thumbnail[1] .'"';
$output .= ' height="'. $thumbnail[2] .'"';
$output .= ' />';
}
echo $output;
}
add_action( 'rss2_item', 'dn_add_rss_image' );
Nota: Incluye el atributo xmlns aquí para que sea válido. La instalación inicial de WordPress no incluye esa declaración de espacio de nombres, y aunque puedes cambiarla, otros temas/plugins también pueden hacerlo.
Más detalles sobre los otros atributos, etc. están en mi respuesta no específica de WordPress aquí.
Esto se integra con la creación de boletines RSS de MailChimp.

Buena respuesta. He probado plugins de WordPress que añaden la imagen al RSS, pero en realidad solo la agregan como parte del contenido. Esto añade la imagen como su propia entidad, lo que te da más control sobre el diseño cuando usas las etiquetas de combinación de MailChimp.

Basándome en codekipple y D_N, quería algunos atributos más en mi media:content
, así que esto es lo que hice:
function add_media_content_to_feed() {
global $post;
$post_id = $post->ID;
if(!has_post_thumbnail($post)) {
return;
}
$thumbnail_size = 'large';
$thumbnail_id = get_post_thumbnail_id($post_id);
$file = image_get_intermediate_size(get_post_thumbnail_id(), $thumbnail_size);
$url = $file['url'];
$type = $file['mime-type'];
$height = $file['height'];
$width = $file['width'];
$file_size = '';
$path = $file['path'];
if($path && 0 !== strpos($path, '/') && !preg_match('|^.:\\\|', $path) && (($uploads = wp_get_upload_dir()) && false === $uploads['error'])) {
$path = $uploads['basedir']."/$path";
$file_size = filesize($path);
}
echo sprintf(__('<media:content url="%s" type="%s" medium="image" height="%s" width="%s" fileSize="%s" />'),
$url,
$type,
$height,
$width,
$file_size
);
}
add_action('rss2_item', 'add_media_content_to_feed');
La respuesta de codekipple también agrega la imagen debajo de todo el contenido del feed. Yo quería mi imagen sobre el contenido, así que hice esto:
function add_featured_image_to_feed($content, $feed_type) {
global $post;
$post_id = $post->ID;
if(has_post_thumbnail($post)) {
$content = '<div class="feed-image">'.get_the_post_thumbnail($post_id, 'large').'</div>'.$content;
}
return $content;
}
add_filter('the_content_feed', 'add_featured_image_to_feed', 10, 9999);
