Come Aggiungere Immagini al Feed RSS WordPress senza Plugin

28 ago 2014, 12:18:30
Visualizzazioni: 40.7K
Voti: 10

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.

1
Commenti

Penso che tu stia aggiungendo l'immagine in evidenza nel contenuto, non nei feed. Controlla la risposta che ho pubblicato.

Robert hue Robert hue
28 ago 2014 12:27:46
Tutte le risposte alla domanda 5
7
13

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.

31 gen 2018 20:53:24
Commenti

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

Juergen Schulze Juergen Schulze
7 giu 2018 12:38:14

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

Aakash Chakravarthy Aakash Chakravarthy
15 mag 2021 18:24:31

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

Jornes Jornes
29 dic 2022 16:10:20

@Jornes lascia quel pezzo così com'è. Perché pensi di doverlo cambiare?

vick vick
31 dic 2022 07:15:07

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

Jornes Jornes
1 gen 2023 08:15:36

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?

Jornes Jornes
5 gen 2023 17:40:16

Quel link a Yahoo serve per ottenere la definizione dell'elemento RSS 'media:image', come indicato nel commento. Non riesco a vedere quale sia il tuo errore da quel link shipboard. Tutto ciò che vedo è una pagina piena di pubblicità.

vick vick
2 feb 2023 15:34:30
Mostra i restanti 2 commenti
8
12

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' );
28 ago 2014 12:20:43
Commenti

Come posso aggiungere imgURL e imgTitle come chiavi separate in XML?

zkanoca zkanoca
28 ago 2014 12:28:22

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

Robert hue Robert hue
28 ago 2014 12:33:12

Preferisco manipolare la stringa di descrizione. (:

zkanoca zkanoca
28 ago 2014 12:39:30

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

Robert hue Robert hue
28 ago 2014 12:47:40

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.

zkanoca zkanoca
28 ago 2014 12:52:50

Fantastico. Sono contento di esserti stato utile. :)

Robert hue Robert hue
28 ago 2014 12:55:56

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

jackncoke jackncoke
1 apr 2016 19:57:09

@jackncoke Sì, funziona. Perché non dovrebbe? Non c'è alcun parametro utilizzato per limitarlo alla categoria.

Robert hue Robert hue
18 apr 2016 09:30:15
Mostra i restanti 3 commenti
0

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.

30 dic 2015 00:15:37
0

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;
 }
});
19 ott 2017 21:03:04
0

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>
11 mag 2020 14:12:03