Come aggiungere l'immagine in evidenza del post al tag RSS item?
Attualmente riesco ad aggiungere l'immagine in evidenza al feed RSS in questo modo:
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');
Tuttavia, esaminando l'XML generato per il feed RSS, ho notato che inserisce l'immagine in evidenza nel tag XML dell'item description.
Come posso inserire l'immagine in evidenza del post in un tag feed RSS dedicato, ad esempio "image", invece di inserirla semplicemente insieme al contenuto del post?

Puoi farlo aggiungendo un'azione all'hook 'rss2_item' in questo modo:
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;
});

Sviluppando la risposta eccellente di codekipple, ecco la mia implementazione modificata, che utilizza l'elemento valido media:content
di Media RSS (specifiche) e verifica l'esistenza di un'immagine in miniatura/principale:
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: Includi qui l'attributo xmlns per farlo validare. L'installazione iniziale di WordPress non include quella dichiarazione dello spazio dei nomi, e sebbene tu possa modificarla, lo stesso possono fare altri temi/plugin.
Ulteriori dettagli sugli altri attributi ecc. sono nella mia risposta non specifica per WordPress qui.
Questo si integra con la creazione di newsletter RSS di MailChimp.

Basandomi sul codice di codekipple e D_N, volevo aggiungere qualche attributo in più al mio media:content
, quindi ecco cosa ho fatto:
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 soluzione di codekipple inoltre aggiunge l'immagine sotto tutto il contenuto del feed. Io volevo invece che l'immagine apparisse sopra il contenuto, quindi ho fatto così:
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);
