Come Aggiungere Immagini al Feed RSS WordPress senza Plugin
Ho cercato un modo per aggiungere l'immagine in evidenza al feed RSS di WordPress senza plugin. Ho trovato alcuni esempi e li ho applicati seguendo le istruzioni, ma non ho ottenuto alcun risultato. Non riesco ancora a visualizzare l'immagine.
L'ultima e migliore soluzione (secondo me) che ho trovato (come indicato qui) è aggiungere il seguente codice al file functions.php
del tema corrente
function featured_image_in_feed( $content ) {
global $post;
if( is_feed() ) {
if ( has_post_thumbnail( $post->ID ) ){
$output = get_the_post_thumbnail( $post->ID, 'medium', array( 'style' => 'float:right; margin:0 0 10px 10px;' ) );
$content = $output . $content;
}
}
return $content;
}
add_filter( 'the_content', 'featured_image_in_feed' );
Non ho notato alcun cambiamento. C'è qualcos'altro che deve essere fatto?
Quello che voglio fare è aggiungere l'immagine in evidenza come un'altra chiave nell'XML. Sarebbe più facile mostrarla nel mio slider.
In base alle note qui presenti e a molte altre risorse che ho letto, ho sviluppato questa soluzione specificatamente per funzionare con il convertitore RSS to Email di Mailchimp utilizzando il feed da WordPress. I loro template utilizzano l'estensione <media:content>
all'elemento item
per popolare la loro macro immagine. Questo codice va inserito nel functions.php del tema.
// Aggiunge il namespace per l'elemento media:image utilizzato sotto
add_filter( 'rss2_ns', function(){
echo 'xmlns:media="http://search.yahoo.com/mrss/"';
});
// Inserisce l'oggetto immagine nell'elemento RSS (vedi MB-191)
add_action('rss2_item', function(){
global $post;
if (has_post_thumbnail($post->ID)){
$thumbnail_ID = get_post_thumbnail_id($post->ID);
$thumbnail = wp_get_attachment_image_src($thumbnail_ID, 'medium');
if (is_array($thumbnail)) {
echo '<media:content medium="image" url="' . $thumbnail[0]
. '" width="' . $thumbnail[1] . '" height="' . $thumbnail[2] . '" />';
}
}
});
La scelta della dimensione dell'immagine 'medium' può essere anche 'thumbnail' se si desidera una più piccola.

Grazie. Esattamente ciò di cui avevo bisogno per far sì che altri aggregatori trovassero effettivamente un'immagine. Aggiungere semplicemente un tag immagine al contenuto non è sufficiente

rss2_ns
è un action hook. Quindi invece di add_filter
dovrebbe essere add_action
- https://core.trac.wordpress.org/browser/tags/5.7.1/src/wp-includes/feed-rss2.php#L36

Ciao! Ho una domanda. Cosa dovrei inserire nell'area evidenziata? Screenshot --> https://snipboard.io/rn6vWx.jpg

Ciao Vick, grazie per la tua risposta! Non sono sicuro. Pensavo che il link dovesse essere quello per il mio feed RSS.

Ciao @Vick, SEOpress mi ha consigliato di ignorare la prima parte. E funziona. Ma ho notato alcuni errori (evidenziati) qui. Per favore, fai riferimento allo screenshot. -> https://snipboard.io/iDXZBj.jpg
Come posso risolvere?

Ecco un ottimo esempio. Come mostrare le miniature dei post in evidenza nei feed di WordPress
Incolla questo snippet di codice nel file functions.php del tuo tema
// mostra le miniature dei post in evidenza nei feed di WordPress
function wcs_post_thumbnails_in_feeds( $content ) {
global $post;
if( has_post_thumbnail( $post->ID ) ) {
$content = '<p>' . get_the_post_thumbnail( $post->ID ) . '</p>' . $content;
}
return $content;
}
add_filter( 'the_excerpt_rss', 'wcs_post_thumbnails_in_feeds' );
add_filter( 'the_content_feed', 'wcs_post_thumbnails_in_feeds' );

Per farlo dovrai modificare il template del Feed. Ecco un tutorial per farlo. http://digwp.com/2012/10/customizing-wordpress-feeds/#customize-templates

Cosa vuoi fare esattamente? Se puoi spiegare meglio, magari qualcuno qui può aiutarti.

Voglio mostrare le immagini e i titoli delle notizie in evidenza su un componente carousel di Bootstrap. Sto cercando di scrivere un file .php. E il tuo aiuto è più che sufficiente per risolvere il mio problema. Grazie. Estrarrò il percorso dell'immagine dalla chiave description.

@Roberthue Puoi confermare che funzioni per il feed degli articoli per categoria? /?cat=15&feed=rss2

Ho provato la risposta selezionata e ho ottenuto un'immagine davvero grande nel mio feed. Consiglierei di aggiungere una dimensione dell'immagine al codice.
// mostra le miniature dei post in evidenza nei feed RSS
function WPGood_rss_thumbs( $content ) {
global $post;
if( has_post_thumbnail( $post->ID ) ) {
$content = '<figure>' . get_the_post_thumbnail( $post->ID, 'thumbnail' ) . '</figure>' . $content;
}
return $content;
}
add_filter( 'the_excerpt_rss', 'WPGood_rss_thumbs' );
add_filter( 'the_content_feed', 'WPGood_rss_thumbs' );
Ho usato 'thumbnail' per il mio feed, ma 'medium' potrebbe funzionare meglio per alcuni siti.

Ho provato queste soluzioni sopra ma non sono riuscito a farlo funzionare. Continuava ad aggiungere la mia immagine nell'area della descrizione.
Ho trovato questo su un altro sito, l'ho modificato leggermente e voilà ha iniziato a funzionare.
add_action('rss2_item', function(){
global $post;
if(has_post_thumbnail($post->ID)){
$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;
}
});

Ecco come recupero le immagini insieme al link e al titolo del post, da un feed RSS esterno.
<div class="row">
<?php
/*
* Ottieni gli ultimi articoli dal feed RSS del blog
* Ordina gli articoli per data di pubblicazione
* Recupera gli attributi SRC e ALT dell'immagine in evidenza utilizzando le espressioni regolari
* Cicla e ripeti 4 volte per visualizzare 4 articoli
*/
$feed = 'https://www.somewpsite.com/feed/';
$entries = array();
$xml = simplexml_load_file($feed);
$entries = array_merge($entries, $xml->xpath("//item"));
//Ordina gli articoli del feed per pubDate
usort($entries, function ($feed1, $feed2) {
return strtotime($feed2->pubDate) - strtotime($feed1->pubDate);
});
?>
<?php
$counter = 0;
foreach ($entries as $entry) {
//recupera l'immagine in evidenza
//Prendi il contenuto dell'articolo del blog
$blogContent = $entry->description;
//espressione regolare per trovare l'attributo img
preg_match('/(<img[^>]+>)/i', $blogContent, $matches);
//memorizza la prima img in una variabile
$featuredImage = $matches[0];
//Recupera l'attributo src con regexp
preg_match('@src="([^"]+)"@', $featuredImage, $getSrc);
//Recupera l'attributo alt con regexp
preg_match('@alt="([^"]+)"@', $featuredImage, $getAlt);
//Memorizza gli attributi filtrati per visualizzarli
$imgAlt = array_pop($getAlt);
$imgSrc = array_pop($getSrc);
// rimuovi i parametri dall'URL
$url = $entry->link;
$url = strtok($url, '?');
//Imposta il contatore per iterare su 4 elementi e poi interrompere il ciclo
if ($counter <= 3) { ?>
<div class="col-12 col-sm-12 col-md-6 col-lg-3 col-xl-3">
<div class="imgContainer">
<a href="<?php echo $url ?>">
<img src="<?php echo $imgSrc ?>" alt="<?php echo $imgAlt; ?>" class="img-fluid">
</a>
</div>
<h4>
<a class="blog-entry-link" href="<?php echo $url ?>"><?= $entry->title ?></a>
</h4>
</div>
<?php
$counter++;
} // fine condizione contatore
}// fine ciclo for ?>
</div>
