Cum să adaugi imagini în fluxul RSS WordPress fără plugin-uri
Am căutat modalități de a adăuga imagini featured în feed-ul RSS fără plugin-uri pentru WordPress. Am găsit câteva exemple și le-am aplicat conform instrucțiunilor. Dar tot ce am obținut până acum este nimic. Tot nu pot accesa imaginea.
Ultima și cea mai bună soluție (după părerea mea) pe care am găsit-o (așa cum se menționează aici) este adăugarea următorului cod în fișierul functions.php
al temei curente
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' );
Nu am văzut nicio schimbare. Mai este ceva de făcut?
Ceea ce vreau să fac este să adaug imaginea featured ca un alt element în XML. Ar fi mai ușor să o afișez pentru slider-ul meu.
Bazat pe notele de aici și multe alte resurse pe care le-am citit, am conceput această soluție special pentru a funcționa cu Mailchimp RSS to Email converter folosind feed-ul din Wordpress. Șabloanele lor folosesc extensia <media:content>
la elementul item
pentru a popula macro-ul lor de imagine. Acest cod se adaugă în functions.php al temei.
// Adaugă namespace pentru elementul media:image folosit mai jos
add_filter( 'rss2_ns', function(){
echo 'xmlns:media="http://search.yahoo.com/mrss/"';
});
// inserează obiectul imagine în elementul RSS (vezi 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] . '" />';
}
}
});
Dimensiunea imaginii 'medium' poate fi înlocuită cu 'thumbnail' dacă doriți o imagine mai mică.

Mulțumesc. Exact ce aveam nevoie pentru ca alte agregatoare să găsească imaginea. Doar adăugarea unui tag de imagine în conținut nu este suficient.

rss2_ns
este un action hook. Deci în loc de add_filter
ar trebui să fie add_action
- https://core.trac.wordpress.org/browser/tags/5.7.1/src/wp-includes/feed-rss2.php#L36

Bună! Am o întrebare. Ce ar trebui să introduc în zona evidențiată? Captură de ecran --> https://snipboard.io/rn6vWx.jpg

@Jornes lasă acea parte așa cum este. De ce crezi că trebuie să o schimbi?

Bună Vick, mulțumesc pentru răspuns! Nu sunt sigur. Am crezut că linkul ar trebui să fie linkul pentru feed-ul meu RSS.

Bună @Vick, SEOpress mi-a recomandat să ignor prima parte. Și funcționează. Dar am observat câteva erori (evidențiate) aici. Te rog să te uiți la captura de ecran. -> https://snipboard.io/iDXZBj.jpg
Cum pot rezolva problema?

Iată un exemplu excelent. Cum să afișezi imaginile miniatura ale articolelor în fluxurile WordPress
lipeste acest fragment de cod în fișierul functions.php al temei tale
// afișează imaginile miniatura ale articolelor în fluxurile 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' );

Pentru asta va trebui să modifici șablonul Feed. Iată un tutorial pentru asta. http://digwp.com/2012/10/customizing-wordpress-feeds/#customize-templates

Ce anume dorești să faci? Dacă poți explica mai multe, poate cineva de aici te poate ajuta.

Vreau să afișez imaginile și titlurile știrilor recomandate într-un component carousel din Bootstrap. Încerc să scriu un fișier .php. Iar ajutorul tău este suficient de bun pentru a-mi rezolva problema. Mulțumesc. Voi extrage calea imaginii din cheia description.

@Roberthue Poți confirma că funcționează pentru fluxul de articole pe categorii? /?cat=15&feed=rss2

Am încercat răspunsul selectat și am obținut o imagine foarte mare în feed-ul meu. Aș recomanda adăugarea unei dimensiuni a imaginii în cod.
// afișează imaginile în miniatură ale articolelor în feed-urile 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' );
Am folosit 'thumbnail' pentru feed-ul meu, dar 'medium' ar putea funcționa mai bine pentru unele site-uri.

Am încercat răspunsurile de mai sus și nu am reușit să fac funcționalitatea să meargă. Continuam să-mi adauge imaginea în zona de descriere.
Am găsit acest cod pe un alt site, l-am modificat puțin și voila, a început să funcționeze.
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;
}
});

Iată cum preiau imaginile împreună cu linkul și titlul postării, dintr-un flux RSS extern.
<div class="row">
<?php
/*
* Obține ultimele articole de blog din fluxul RSS
* Sortează articolele după data publicării
* Obține atributul SRC și ALT al imaginii principale folosind expresii regulate
* Parcurge și repetă de 4 ori pentru a afișa 4 articole
*/
$feed = 'https://www.somewpsite.com/feed/';
$entries = array();
$xml = simplexml_load_file($feed);
$entries = array_merge($entries, $xml->xpath("//item"));
//Sortează articolele după pubDate
usort($entries, function ($feed1, $feed2) {
return strtotime($feed2->pubDate) - strtotime($feed1->pubDate);
});
?>
<?php
$counter = 0;
foreach ($entries as $entry) {
//obține imaginea principală
//intră în conținutul articolului de blog
$blogContent = $entry->description;
//expresie regulată pentru a găsi atributul img
preg_match('/(<img[^>]+>)/i', $blogContent, $matches);
//salvează prima imagine în variabilă
$featuredImage = $matches[0];
//Obține atributul src cu expresie regulată
preg_match('@src="([^"]+)"@', $featuredImage, $getSrc);
//Obține atributul alt cu expresie regulată
preg_match('@alt="([^"]+)"@', $featuredImage, $getAlt);
//Salvează atributele filtrate pentru a le afișa.
$imgAlt = array_pop($getAlt);
$imgSrc = array_pop($getSrc);
// elimină parametrii din URL
$url = $entry->link;
$url = strtok($url, '?');
//Set counter pentru a itera peste 4 articole și apoi oprește bucla.
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++;
} // sfârșitul condiției counter
}// sfârșitul buclei ?>
</div>
