Add thumbnail to WordPress RSS with another tag

I am using a WordPress RSS to use in my iOS project. The feed doesn’t have thumbnail links in it, so I searched and found this code to add thumbnail links to feed.

/* include thumbnail in RSS feed */
function add_thumb_to_RSS($content) {
   global $post;
   if ( has_post_thumbnail( $post->ID ) ){
      $content = '' . get_the_post_thumbnail( $post->ID, 'thumbnail' ) . '' . $content;
   }
   return $content;
}
add_filter('the_excerpt_rss', 'add_thumb_to_RSS');
add_filter('the_content_feed', 'add_thumb_to_RSS')

This code adds the image link in feed, but it adds as html code in the beginning of description tag like this:

Read More
<description>
<![CDATA[
<img width="150" height="150" src="http://www.ipadia.co/wp-content/uploads/2012/02/sayfada-bul-150x150.png" class="attachment-thumbnail wp-post-image" alt="sayfada bul" title="sayfada bul" />Some text some text Some text some text Some text some text Some text some text Some text some text Some text some text ....
]]>
</description>

I want to add image link with another tag like <image> or <thumb> the link </thumb>. So I can parse this more easily.

How can I do this? Thanks in advance.

Related posts

Leave a Reply

3 comments

  1. I solved it finally 🙂 I changed the function that I posted before. The new function is this:

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

    This gives the image link in new tag <post-thumbnail> like I wanted.

  2. There are 2 functions in wordpress that can help you in a very easy way, try this:

    (int) $id = get_post_thumbnail_id($post->ID);
    $url = wp_get_attachment_url( $id ); 
    

    Edit:

    To modify the feed you can check this documentation

    One easy option is modifying directly the feed template, an example:

    in file wp-includes/feed-rss2.php (note you may modify another feed template as “feed-rss.php”, “feed-atom.php”) you can add the new tag:

    echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
    
    <rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
        <?php do_action('rss2_ns'); ?>
    >
    
    <channel>
        <title><?php bloginfo_rss('name'); wp_title_rss(); ?></title>
        <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
        <link><?php bloginfo_rss('url') ?></link>
        <description><?php bloginfo_rss("description") ?></description>
        <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
        <language><?php bloginfo_rss( 'language' ); ?></language>
        <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
        <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
        <?php do_action('rss2_head'); ?>
        <?php while( have_posts()) : the_post(); ?>
        <item>
            <title><?php the_title_rss() ?></title>
            <link><?php the_permalink_rss() ?></link>
            <comments><?php comments_link_feed(); ?></comments>
            <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
            <dc:creator><?php the_author() ?></dc:creator>
            <?php the_category_rss('rss2') ?>
            <?php 
                //start modified code to add tag with post thumb url
                (int) $id = get_post_thumbnail_id($post->ID);
                $thumb_url = wp_get_attachment_url( $id ); 
            ?>
            <thumb><?php echo $thumb_url;?></thumb>
                <?php //end modified code to add tag with post thumb url ?>
            <guid isPermaLink="false"><?php the_guid(); ?></guid>
    <?php if (get_option('rss_use_excerpt')) : ?>
            <description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
    <?php else : ?>
            <description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
        <?php if ( strlen( $post->post_content ) > 0 ) : ?>
            <content:encoded><![CDATA[<?php the_content_feed('rss2') ?>]]></content:encoded>
        <?php else : ?>
            <content:encoded><![CDATA[<?php the_excerpt_rss() ?>]]></content:encoded>
        <?php endif; ?>
    <?php endif; ?>
            <wfw:commentRss><?php echo esc_url( get_post_comments_feed_link(null, 'rss2') ); ?></wfw:commentRss>
            <slash:comments><?php echo get_comments_number(); ?></slash:comments>
    <?php rss_enclosure(); ?>
        <?php do_action('rss2_item'); ?>
        </item>
        <?php endwhile; ?>
    </channel>
    </rss>