Cómo Agregar Imágenes al Feed RSS de WordPress sin Plugins

28 ago 2014, 12:18:30
Vistas: 40.7K
Votos: 10

He buscado cómo agregar imágenes destacadas al feed RSS sin plugins para WordPress. He encontrado algunos ejemplos y los he aplicado según las instrucciones. Pero hasta ahora no he conseguido nada. Todavía no puedo mostrar la imagen.

La última y mejor solución (en mi opinión) que he encontrado (como se menciona aquí) es agregar el siguiente código al archivo functions.php del tema actual

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' );

No he visto ningún cambio. ¿Hay algo más que deba hacerse?

Lo que quiero hacer es agregar la imagen destacada como otra clave en el XML. Sería más fácil mostrarla en mi slider.

1
Comentarios

Creo que estás añadiendo la imagen destacada en el contenido, no en los feeds. Revisa la respuesta que publiqué.

Robert hue Robert hue
28 ago 2014 12:27:46
Todas las respuestas a la pregunta 5
7
13

Basándome en las notas aquí y muchos otros recursos que leí, llegué a esta solución específicamente para trabajar con el convertidor RSS a Email de Mailchimp con el feed de Wordpress. Sus plantillas usan la extensión <media:content> para el elemento item para poblar su macro de imagen. Este código va en el functions.php del tema.

// Agregar namespace para el elemento media:image usado abajo
add_filter( 'rss2_ns', function(){
  echo 'xmlns:media="http://search.yahoo.com/mrss/"';
});

// insertar el objeto de imagen en el item RSS (ver 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 elección del tamaño de imagen 'medium' también puede ser 'thumbnail' si se desea una más pequeña.

31 ene 2018 20:53:24
Comentarios

Gracias. Justo lo que necesitaba para que otros agregadores puedan encontrar una imagen. Simplemente añadir una etiqueta de imagen al contenido no es suficiente

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

rss2_ns es un hook de acción. Así que en lugar de add_filter debería ser add_action - https://core.trac.wordpress.org/browser/tags/5.7.1/src/wp-includes/feed-rss2.php#L36

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

¡Hola! Tengo una pregunta. ¿Qué debería insertar en el área resaltada? Captura de pantalla --> https://snipboard.io/rn6vWx.jpg

Jornes Jornes
29 dic 2022 16:10:20

@Jornes deja ese fragmento como está. ¿Por qué crees que necesitas cambiarlo?

vick vick
31 dic 2022 07:15:07

¡Hola Vick, gracias por tu respuesta! No estoy seguro. Pensé que el enlace debería ser el enlace para mi feed RSS.

Jornes Jornes
1 ene 2023 08:15:36

Hola @Vick, SEOpress me recomendó ignorar la primera parte. Y funciona. Pero noté algunos errores (resaltados) aquí. Por favor, consulta la captura de pantalla. -> https://snipboard.io/iDXZBj.jpg

¿Cómo puedo solucionarlo?

Jornes Jornes
5 ene 2023 17:40:16

Ese enlace a Yahoo es para obtener la definición del elemento 'media:image' de RSS, como se menciona en el comentario. No puedo ver cuál es tu error desde ese enlace de shipboard. Solo veo una página llena de anuncios.

vick vick
2 feb 2023 15:34:30
Mostrar los 2 comentarios restantes
8
12

Aquí tienes un gran ejemplo. Cómo mostrar miniaturas de posts destacados en los feeds de WordPress

Pega este fragmento de código en el archivo functions.php de tu tema

// mostrar miniaturas de posts destacados en los feeds de 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
Comentarios

¿Cómo puedo agregar imgURL y imgTitle como claves separadas en XML?

zkanoca zkanoca
28 ago 2014 12:28:22

Para eso tendrás que modificar la plantilla del Feed. Aquí hay un tutorial para eso. http://digwp.com/2012/10/customizing-wordpress-feeds/#customize-templates

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

Prefiero manipular la cadena de descripción. (:

zkanoca zkanoca
28 ago 2014 12:39:30

¿Qué es exactamente lo que quieres hacer? Si puedes explicar más, tal vez alguien aquí pueda ayudarte.

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

Quiero mostrar las imágenes y títulos de noticias destacadas en un componente carrusel de Bootstrap. Estoy intentando escribir un archivo .php. Y tu ayuda es más que suficiente para resolver mi problema. Gracias. Extraeré la ruta de la imagen de la clave de descripción.

zkanoca zkanoca
28 ago 2014 12:52:50

Eso es genial. Me alegra poder haber ayudado. :)

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

@Roberthue ¿Puedes confirmar que esto funciona para el feed de publicaciones por categoría? /?cat=15&feed=rss2

jackncoke jackncoke
1 abr 2016 19:57:09

@jackncoke Sí, funciona. ¿Por qué no lo haría? No hay parámetro utilizado para limitarlo por categoría.

Robert hue Robert hue
18 abr 2016 09:30:15
Mostrar los 3 comentarios restantes
0

Probé la respuesta seleccionada y obtuve una imagen realmente grande en mi feed. Recomendaría agregar un tamaño de imagen al código.

// mostrar miniaturas de posts destacados en feeds 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' );

Usé 'thumbnail' para mi feed, pero 'medium' podría funcionar mejor para algunos sitios.

30 dic 2015 00:15:37
0

Probé las respuestas anteriores y no pude hacer que funcionara. Seguía añadiendo mi imagen en el área de descripción.

Encontré esto en otro sitio, lo modifiqué un poco y ¡voilá! comenzó a funcionar.

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 oct 2017 21:03:04
0

Aquí te muestro cómo obtengo las imágenes junto con el enlace y el título de la publicación, desde un feed RSS externo.

<div class="row">

    <?php
    /*
     * Obtener las últimas entradas del blog desde un feed RSS
     * Ordenar las entradas por fecha de publicación
     * Obtener los atributos SRC y ALT de la imagen destacada usando expresiones regulares
     * Repetir el bucle 4 veces para mostrar 4 artículos
     */
    $feed = 'https://www.somewpsite.com/feed/';
    $entries = array();
    $xml = simplexml_load_file($feed);
    $entries = array_merge($entries, $xml->xpath("//item"));
    //Ordenar entradas del feed por pubDate
    usort($entries, function ($feed1, $feed2) {
        return strtotime($feed2->pubDate) - strtotime($feed1->pubDate);
    });
    ?>

    <?php
    $counter = 0;
    foreach ($entries as $entry) {
        //obtener imagen destacada
        //Obtener contenido de la entrada del blog
        $blogContent = $entry->description;
        //expresión regular para encontrar atributo img
        preg_match('/(<img[^>]+>)/i', $blogContent, $matches);
        //almacenar la primera img en variable
        $featuredImage = $matches[0];
        //Obtener atributo src con regexp
        preg_match('@src="([^"]+)"@', $featuredImage, $getSrc);
        //Obtener atributo alt con regexp
        preg_match('@alt="([^"]+)"@', $featuredImage, $getAlt);
        //Almacenar los atributos filtrados para mostrarlos.
        $imgAlt = array_pop($getAlt);
        $imgSrc = array_pop($getSrc);
        // eliminar parámetros de URL
        $url = $entry->link;
        $url = strtok($url, '?');
        //Configurar contador para iterar sobre 4 elementos y luego detener el bucle.
        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++;
        } // fin condición contador
    }// fin bucle foreach ?>
</div>
11 may 2020 14:12:03