Je suis en mesure d'ajouter une image sélectionnée au flux RSS comme suit:
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');
Cependant, en examinant le code XML généré pour le flux RSS, j'ai remarqué que l'image sélectionnée était collée dans la balise d'élément de description XML.
Comment puis-je insérer l'image de l'article en vedette dans sa propre balise d'élément de fil RSS, disons "image", plutôt que de l'insérer dans le contenu de l'article?
Vous pouvez le faire en ajoutant une action au hook 'rss2_item' comme ceci:
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;
});
Construit à partir de l'excellente réponse de codekipple , voici ma mise en œuvre modifiée, qui utilise l'élément valide Media RSS media:content
( spec ) et vérifiant l'existence d'une image miniature/sélectionnée:
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' );
Remarque: Incluez l'attribut xmlns ici pour le valider. L'installation initiale de WordPress n'inclut pas cette déclaration d'espace de noms, et bien que vous puissiez la modifier, d'autres thèmes/plugins le peuvent également.
Plus de détails sur les autres attributs, etc. sont dans ma réponse non spécifique à WordPress, ici .
Cela s'intègre au bâtiment de la newsletter RSS de MailChimp.
En me basant sur codekipple et D_N, je voulais quelques attributs supplémentaires dans mon media:content
, alors voici ce que j'ai fait:
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 réponse de codekipple ajoute également l’image sous le contenu de tous les flux. Je voulais mon image au-dessus du contenu, alors j'ai fait ceci:
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);