WordPress.org

Make WordPress Core

Ticket #8994: 8994_mrss.diff

File 8994_mrss.diff, 6.3 KB (added by hailin, 6 years ago)

mrss feed

  • C:/xampp/htdocs/wordpress_trunk/wp-includes/feed-rss2.php

     
    1717        xmlns:dc="http://purl.org/dc/elements/1.1/" 
    1818        xmlns:atom="http://www.w3.org/2005/Atom" 
    1919        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
     20        xmlns:media="http://search.yahoo.com/mrss/" 
    2021        <?php do_action('rss2_ns'); ?> 
    2122> 
    2223 
     
    5455                <wfw:commentRss><?php echo get_post_comments_feed_link(); ?></wfw:commentRss> 
    5556<?php rss_enclosure(); ?> 
    5657        <?php do_action('rss2_item'); ?> 
     58                 
     59        <?php  
     60                  $media_rss = apply_filters('media_rss', $media_rss = array());  
     61                  media_print_rss( $media_rss );  
     62        ?> 
     63         
    5764        </item> 
    5865        <?php endwhile; ?> 
    5966</channel> 
  • C:/xampp/htdocs/wordpress_trunk/wp-includes/feed.php

     
    558558 
    559559        return $feed; 
    560560} 
     561 
     562/**  
     563 * search for post content for for img tags, and add them to media_rss array 
     564 *  
     565 * @package WordPress 
     566 * @subpackage Feed 
     567 * @since 2.8.0 
     568 */ 
     569function wp_media_rss( $media_rss ){ 
     570         
     571        global $mrss_gallery_lookup; 
     572         
     573        // Honor the feed settings. Don't include any media that isn't in the feed. 
     574        if ( get_option( 'rss_use_excerpt' ) || !strlen( get_the_content() ) ) { 
     575                $content = the_excerpt_rss(); 
     576        } else { 
     577                // If any galleries are processed, we need to capture the attachment IDs. 
     578                add_filter( 'wp_get_attachment_link', 'media_rss_gallery_lookup', 10, 5 ); 
     579                $content = apply_filters( 'the_content', get_the_content() ); 
     580                remove_filter( 'wp_get_attachment_link', 'media_rss_gallery_lookup', 10, 5 ); 
     581                $lookup = $mrss_gallery_lookup; 
     582                unset( $mrss_gallery_lookup ); 
     583        } 
     584 
     585        // img tags 
     586        $r = preg_match_all('/<img (.+?)>/', $content, $matches );  
     587         
     588        if ( $r === false || $r === 0 ) 
     589                return $media_rss;  
     590         
     591        $num = 0; 
     592        foreach ( $matches[1] as $attrs ) { 
     593                $item = $img = array(); 
     594                         
     595                // Construct $img array from <img> attributes 
     596                foreach ( wp_kses_hair($attrs, array('http')) as $attr ) 
     597                        $img[$attr['name']] = $attr['value']; 
     598                                 
     599                if ( !isset($img['src']) ) 
     600                        continue; 
     601                                 
     602                $img['src'] = media_rss_url( $img['src'] ); 
     603                         
     604                // Skip emoticons 
     605                if ( isset( $img['class'] ) && false !== strpos( $img['class'], 'wp-smiley' ) ) 
     606                        continue; 
     607                         
     608                if ( false !== strpos( $img['src'], '&' ) )  
     609                        continue;  
     610                         
     611                $id = false; 
     612                if ( isset( $lookup[$img['src']] ) ) { 
     613                        $id = $lookup[$img['src']]; 
     614                } elseif ( isset( $img['class'] ) && preg_match( '/wp-image-(\d+)/', $img['class'], $match ) ) { 
     615                        $id = $match[1]; 
     616                } 
     617                         
     618                if ( $id ) { 
     619                        // It's an attachment, so we will get the URLs, title, and description from functions 
     620                        $attachment =& get_post( $id ); 
     621                        $src = wp_get_attachment_image_src( $id, 'full' ); 
     622                        if ( !empty( $src[0] ) ) 
     623                                $img['src'] = $src[0]; 
     624                                         
     625                        $thumbnail = wp_get_attachment_image_src( $id, 'thumbnail' ); 
     626                        if ( !empty( $thumbnail[0] ) && $thumbnail[0] != $img['src'] ) 
     627                                $img['thumbnail'] = $thumbnail[0]; 
     628                                         
     629                        $title = get_the_title( $id ); 
     630                        if ( !empty( $title ) ) 
     631                                $img['title'] = trim($title); 
     632                                         
     633                        $description = get_the_content( $id ); 
     634                        if ( !empty( $attachment->post_excerpt ) ) 
     635                                $img['description'] = trim($attachment->post_excerpt); 
     636                } 
     637                         
     638                // If this is the first image in the markup, make it the post thumbnail 
     639                if ( ++$num == 1 ) { 
     640                        if ( isset( $img['thumbnail'] ) ) 
     641                                $media_rss[]['thumbnail']['attr']['url'] = $img['thumbnail']; 
     642                        else 
     643                                $media_rss[]['thumbnail']['attr']['url'] = $img['src']; 
     644                } 
     645 
     646                $item['content']['attr']['url'] = $img['src']; 
     647                $item['content']['attr']['medium'] = 'image'; 
     648                if ( !empty($img['title']) ) { 
     649                        $item['content']['children']['title']['attr']['type'] = 'plain'; 
     650                        $item['content']['children']['title']['children'][] = $img['title']; 
     651                } elseif ( !empty($img['alt']) ) { 
     652                        $item['content']['children']['title']['attr']['type'] = 'plain'; 
     653                        $item['content']['children']['title']['children'][] = $img['alt']; 
     654                } 
     655                if ( !empty($img['description']) ) { 
     656                        $item['content']['children']['description']['attr']['type'] = 'html'; 
     657                        $item['content']['children']['description']['children'][] = $img['description']; 
     658                        } 
     659                if ( !empty($img['thumbnail']) ) 
     660                        $item['content']['children']['thumbnail']['attr']['url'] = $img['thumbnail']; 
     661                 
     662                $media_rss[] = $item; 
     663        } 
     664         
     665        return $media_rss;  
     666} 
     667add_filter( 'media_rss', 'wp_media_rss' );  
     668 
     669function media_rss_url( $url ) { 
     670         
     671        if ( preg_match( '!^https?://!', $url ) ) 
     672                return $url; 
     673        if ( $url{0} == '/' ) 
     674                return rtrim( get_bloginfo('home'), '/' ) . $url; 
     675                 
     676        return get_bloginfo('home') . $url; 
     677} 
     678 
     679function media_rss_gallery_lookup( $link, $id, $size, $permalink, $icon ) { 
     680        global $media_rss_gallery_lookup; 
     681         
     682        preg_match( '/ src="(.*?)"/', $link, $matches ); 
     683        $media_rss_gallery_lookup[$matches[1]] = $id; 
     684         
     685        return $link; 
     686} 
     687 
     688/** 
     689 * print media_rss array to generate mrss entries such as <media:content>  
     690 *  
     691 * @package WordPress 
     692 * @subpackage Feed 
     693 * @since 2.8.0 
     694 */ 
     695function media_print_rss( $media_rss ) { 
     696 
     697        foreach( (array)$media_rss as $elements ) 
     698                media_print_element( $elements ); 
     699                 
     700        echo "\n"; 
     701} 
     702 
     703function media_print_element( $elements, $indent = 2 ) { 
     704         
     705        echo "\n";  
     706        foreach ( (array)$elements as $name => $data ) { 
     707                 
     708                echo str_repeat("\t", $indent) . "<media:$name"; 
     709                if ( !empty($data['attr']) ) { 
     710                        foreach ( $data['attr'] as $attr => $value ) 
     711                                echo " $attr=\"" . ent2ncr($value) . "\""; 
     712                } 
     713                if ( !empty($data['children']) ) { 
     714                        $nl = false; 
     715                        echo ">";  
     716                        foreach ( $data['children'] as $_name => $_data ) { 
     717                                 
     718                                if ( is_int($_name) ) { 
     719                                         
     720                                        if ( !is_array( $_data ) ){ 
     721                                                echo ent2ncr($_data); 
     722                                        }else { 
     723                                                //allow nested same level elements 
     724                                                $nl = true; 
     725                                                media_print_element( $_data, $indent + 1 ); 
     726                                        } 
     727                                         
     728                                } else { 
     729                                        $nl = true; 
     730                                        media_print_element( array( $_name => $_data ), $indent + 1 ); 
     731                                } 
     732                        } 
     733                         
     734                        if ( $nl ) 
     735                                echo str_repeat("\t", $indent); 
     736                                 
     737                        echo "</media:$name>\n"; 
     738                } else { 
     739                        echo " />\n"; 
     740                } 
     741        } 
     742} 
     743 
     744?>