Come aggiungere l'immagine in evidenza del post al tag RSS item?

24 lug 2012, 18:00:26
Visualizzazioni: 13.5K
Voti: 10

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?

0
Tutte le risposte alla domanda 3
1
12

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;
});
30 lug 2012 19:40:48
Commenti

Ho trovato questa soluzione dopo ore di ricerca... ottima soluzione, grazie!

cawecoy cawecoy
7 mag 2016 02:00:20
1

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.

24 ago 2017 23:28:50
Commenti

Ottima risposta. Ho provato plugin di WordPress che aggiungono l'immagine all'RSS, ma in realtà la aggiungono solo come parte del contenuto. Questo la aggiunge come entità separata, dandoti più controllo sul layout quando usi i tag di merge di MailChimp.

Ian Lunn Ian Lunn
23 gen 2018 13:34:09
0

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);
22 mar 2019 01:17:30