WordPress.org

Make WordPress Core

Ticket #8994: 8994-2.diff

File 8994-2.diff, 4.5 KB (added by technosailor, 8 years ago)

Use post_thumbnail features

  • wp-includes/feed-rss2.php

     
    1717        xmlns:atom="http://www.w3.org/2005/Atom"
    1818        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    1919        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
     20        xmlns:media="http://search.yahoo.com/mrss/"
    2021        <?php do_action('rss2_ns'); ?>
    2122>
    2223
     
    5455                <slash:comments><?php echo get_comments_number(); ?></slash:comments>
    5556<?php rss_enclosure(); ?>
    5657        <?php do_action('rss2_item'); ?>
     58        <?php 
     59                $media_rss = apply_filters('media_rss', $media_rss = array()); 
     60                media_print_rss( $media_rss ); 
     61        ?>
    5762        </item>
    5863        <?php endwhile; ?>
    5964</channel>
  • wp-includes/feed.php

     
    534534
    535535        return $feed;
    536536}
     537
     538
     539/**
     540 * search for post content for for img tags, and add them to media_rss array
     541 *
     542 * @package WordPress
     543 * @subpackage Feed
     544 * @since 3.0
     545 */
     546function wp_media_rss( $media_rss ){
     547       
     548        global $mrss_gallery_lookup, $post;
     549       
     550        // Honor the feed settings. Don't include any media that isn't in the feed.
     551        if ( get_option( 'rss_use_excerpt' ) || !strlen( get_the_content() ) ) {
     552                $content = the_excerpt_rss();
     553        } else {
     554                // If any galleries are processed, we need to capture the attachment IDs.
     555                add_filter( 'wp_get_attachment_link', 'media_rss_gallery_lookup', 10, 5 );
     556                $content = apply_filters( 'the_content', get_the_content() );
     557                remove_filter( 'wp_get_attachment_link', 'media_rss_gallery_lookup', 10, 5 );
     558                $lookup = $mrss_gallery_lookup;
     559                unset( $mrss_gallery_lookup );
     560        }
     561
     562                if( !has_post_thumbnail( $post->ID ) )
     563                        return $media_rss;
     564                       
     565                $image_id = get_post_thumbnail_id( $post->ID );
     566                $image_data = wp_get_attachment_metadata( $image_id );
     567
     568                $item['content']['attr']['url'] = wp_get_attachment_url( $image_id );
     569                $item['content']['attr']['medium'] = 'image';
     570                if ( !empty( $image_data['image_meta']['title'] ) ) {
     571                        $item['content']['children']['title']['attr']['type'] = 'plain';
     572                        $item['content']['children']['title']['children'][] = $image_data['image_meta']['title'];
     573                } elseif ( !empty( $image_data['image_meta']['caption'] ) ) {
     574                        $item['content']['children']['title']['attr']['type'] = 'plain';
     575                        $item['content']['children']['title']['children'][] = $image_data['image_meta']['caption'];
     576                        $item['content']['children']['description']['children'][] = $image_data['image_meta']['caption']
     577                }
     578                if ( !empty( $image_data['sizes']['thumbnail ']) )
     579                        $item['content']['children']['thumbnail']['attr']['url'] = wp_get_attachment_thumb_url( $image_id );
     580               
     581                $media_rss[] = $item;
     582        }
     583       
     584        return $media_rss;
     585}
     586add_filter( 'media_rss', 'wp_media_rss' );
     587
     588function media_rss_url( $url ) {
     589       
     590        if ( preg_match( '!^https?://!', $url ) )
     591                return $url;
     592        if ( $url{0} == '/' )
     593                return rtrim( get_bloginfo('home'), '/' ) . $url;
     594               
     595        return get_bloginfo('home') . $url;
     596}
     597
     598function media_rss_gallery_lookup( $link, $id, $size, $permalink, $icon ) {
     599        global $media_rss_gallery_lookup;
     600       
     601        preg_match( '/ src="(.*?)"/', $link, $matches );
     602        $media_rss_gallery_lookup[$matches[1]] = $id;
     603       
     604        return $link;
     605}
     606
     607/**
     608 * print media_rss array to generate mrss entries such as <media:content>
     609 *
     610 * @package WordPress
     611 * @subpackage Feed
     612 * @since 2.8.0
     613 */
     614function media_print_rss( $media_rss ) {
     615
     616        foreach( (array)$media_rss as $elements )
     617                media_print_element( $elements );
     618               
     619        echo "\n";
     620}
     621
     622function media_print_element( $elements, $indent = 2 ) {
     623       
     624        echo "\n";
     625        foreach ( (array)$elements as $name => $data ) {
     626               
     627                echo str_repeat("\t", $indent) . "<media:$name";
     628                if ( !empty($data['attr']) ) {
     629                        foreach ( $data['attr'] as $attr => $value )
     630                                echo " $attr=\"" . ent2ncr($value) . "\"";
     631                }
     632                if ( !empty($data['children']) ) {
     633                        $nl = false;
     634                        echo ">";
     635                        foreach ( $data['children'] as $_name => $_data ) {
     636                               
     637                                if ( is_int($_name) ) {
     638                                       
     639                                        if ( !is_array( $_data ) ){
     640                                                echo ent2ncr($_data);
     641                                        }else {
     642                                                //allow nested same level elements
     643                                                $nl = true;
     644                                                media_print_element( $_data, $indent + 1 );
     645                                        }
     646                                       
     647                                } else {
     648                                        $nl = true;
     649                                        media_print_element( array( $_name => $_data ), $indent + 1 );
     650                                }
     651                        }
     652                       
     653                        if ( $nl )
     654                                echo str_repeat("\t", $indent);
     655                               
     656                        echo "</media:$name>\n";
     657                } else {
     658                        echo " />\n";
     659                }
     660        }
     661}
     662 No newline at end of file