WordPress.org

Make WordPress Core

Ticket #23572: 23572-html.2.diff

File 23572-html.2.diff, 11.6 KB (added by wonderboymusic, 9 years ago)
  • wp-includes/media.php

    diff --git wp-includes/media.php wp-includes/media.php
    index 60677ba..60068bd 100644
    function wp_audio_shortcode( $attr ) { 
    887887        }
    888888
    889889        $library = apply_filters( 'wp_audio_shortcode_library', 'mediaelement' );
    890         if ( 'mediaelement' === $library ) {
     890        if ( 'mediaelement' === $library && did_action( 'init' ) ) {
    891891                wp_enqueue_style( 'wp-mediaelement' );
    892892                wp_enqueue_script( 'wp-mediaelement' );
    893893        }
    function wp_video_shortcode( $attr ) { 
    994994        }
    995995
    996996        $library = apply_filters( 'wp_video_shortcode_library', 'mediaelement' );
    997         if ( 'mediaelement' === $library ) {
     997        if ( 'mediaelement' === $library && did_action( 'init' ) ) {
    998998                wp_enqueue_style( 'wp-mediaelement' );
    999999                wp_enqueue_script( 'wp-mediaelement' );
    10001000        }
    function get_attached_video( $post_id = 0 ) { 
    18281828}
    18291829
    18301830/**
    1831  * Extract the srcs from the post's [{media type}] <source>s
     1831 * Extract and parse {media type} shortcodes or srcs from the passed content
    18321832 *
    18331833 * @since 3.6.0
    18341834 *
     1835 * @param string $type Type of media: audio or video
    18351836 * @param string $content A string which might contain media data.
     1837 * @param boolean $html Whether to return HTML or URLs
    18361838 * @param boolean $remove Whether to remove the found URL from the passed content.
    1837  * @return array A list of lists. Each item has a list of sources corresponding
    1838  *              to a [{media type}]'s primary src and specified fallbacks
     1839 * @return array A list of parsed shortcodes or extracted srcs
    18391840 */
    1840 function get_content_media( $type, &$content, $remove = false ) {
    1841         $src = '';
     1841function get_content_media( $type, &$content, $html = true, $remove = false ) {
    18421842        $items = array();
    18431843        $matches = array();
    18441844
    18451845        if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) {
    18461846                foreach ( $matches as $shortcode ) {
    18471847                        if ( $type === $shortcode[2] ) {
    1848                                 $srcs = array();
    18491848                                $count = 1;
    18501849                                if ( $remove )
    1851                                         $content = str_replace( $shortcode[0], '', $content, $count );
     1850                                        $content =& str_replace( $shortcode[0], '', $content, $count );
    18521851
    1853                                 $item = do_shortcode_tag( $shortcode );
    1854                                 preg_match_all( '#src=[\'"](.+?)[\'"]#is', $item, $src, PREG_SET_ORDER );
    1855                                 if ( ! empty( $src ) ) {
    1856                                         foreach ( $src as $s )
    1857                                                 $srcs[] = $s[1];
    1858 
    1859                                         $items[] = array_values( array_unique( $srcs ) );
    1860                                 }
     1852                                $items[] = do_shortcode_tag( $shortcode );
    18611853                        }
    18621854                }
    18631855        }
    1864         return $items;
     1856
     1857        if ( $html )
     1858                return $items;
     1859
     1860        $src = '';
     1861        $data = array();
     1862
     1863        foreach ( $items as $item ) {
     1864                preg_match_all( '#src=[\'"](.+?)[\'"]#is', $item, $src, PREG_SET_ORDER );
     1865                if ( ! empty( $src ) ) {
     1866                        $srcs = array();
     1867                        foreach ( $src as $s )
     1868                                $srcs[] = $s[1];
     1869
     1870                        $data[] = array_values( array_unique( $srcs ) );
     1871                }
     1872        }
     1873
     1874        return $data;
    18651875}
    18661876
    18671877/**
    function get_content_media( $type, &$content, $remove = false ) { 
    18701880 *
    18711881 * @since 3.6.0
    18721882 *
     1883 * @param string $type Type of media: audio or video
    18731884 * @param string $content A string which might contain media data.
    18741885 * @param boolean $remove Whether to remove the found URL from the passed content.
     1886 * @param int $limit Optional. The number of galleries to return
    18751887 * @return array A list of found HTML media embeds and possibly a URL by itself
    18761888 */
    1877 function get_embedded_media( $type, &$content, $remove = false ) {
     1889function get_embedded_media( $type, &$content, $remove = false, $limit = 0 ) {
    18781890        $html = array();
    18791891        $matches = '';
    18801892
    function get_embedded_media( $type, &$content, $remove = false ) { 
    18841896                        if ( $remove )
    18851897                                $content = str_replace( $matches[0], '', $content );
    18861898
    1887                         return $html;
     1899                        if ( $limit > 0 && count( $html ) >= $limit )
     1900                                break;
    18881901                }
    18891902        }
    18901903
     1904        if ( ! empty( $html ) && count( $html ) >= $limit )
     1905                return $html;
     1906
    18911907        $lines = explode( "\n", trim( $content ) );
    18921908        $line = trim( array_shift( $lines  ) );
    18931909
    function get_embedded_media( $type, &$content, $remove = false ) { 
    19011917}
    19021918
    19031919/**
    1904  * Extract the srcs from the post's [audio] <source>s
     1920 * Extract the HTML or <source> srcs from the content's [audio]
    19051921 *
    19061922 * @since 3.6.0
    19071923 *
    19081924 * @param string $content A string which might contain audio data.
     1925 * @param boolean $html Whether to return HTML or URLs
    19091926 * @param boolean $remove Whether to remove the found URL from the passed content.
    1910  * @return array A list of lists. Each item has a list of sources corresponding
    1911  *              to a [audio]'s primary src and specified fallbacks
     1927 * @return array A list of lists. Each item has a list of HTML or srcs corresponding
     1928 *              to an [audio]'s HTML or primary src and specified fallbacks
    19121929 */
    1913 function get_content_audio( &$content, $remove = false ) {
    1914         return get_content_media( 'audio', $content, $remove );
     1930function get_content_audio( &$content, $html = true, $remove = false ) {
     1931        return get_content_media( 'audio', $content, $html, $remove );
    19151932}
    19161933
    19171934/**
    function get_embedded_audio( &$content, $remove = false ) { 
    19291946}
    19301947
    19311948/**
    1932  * Extract the srcs from the post's [video] <source>s
     1949 * Extract the HTML or <source> srcs from the content's [video]
    19331950 *
    19341951 * @since 3.6.0
    19351952 *
    19361953 * @param string $content A string which might contain video data.
     1954 * @param boolean $html Whether to return HTML or URLs
    19371955 * @param boolean $remove Whether to remove the found URL from the passed content.
    1938  * @return array A list of lists. Each item has a list of sources corresponding
    1939  *              to a [video]'s primary src and specified fallbacks
     1956 * @return array A list of lists. Each item has a list of HTML or srcs corresponding
     1957 *              to a [video]'s HTML or primary src and specified fallbacks
    19401958 */
    1941 function get_content_video( &$content, $remove = false ) {
    1942         return get_content_media( 'video', $content, $remove );
     1959function get_content_video( &$content, $html = true, $remove = false ) {
     1960        return get_content_media( 'video', $content, $html, $remove );
    19431961}
    19441962
    19451963/**
    function wp_video_embed( $matches, $attr, $url, $rawattr ) { 
    20012019wp_embed_register_handler( 'wp_video_embed', '#https?://.+?\.(' . join( '|', wp_get_video_extensions() ) . ')#i', apply_filters( 'wp_video_embed_handler', 'wp_video_embed' ), 9999 );
    20022020
    20032021/**
     2022 * Return suitable HTML code for output based on the content related to the global $post
     2023 * If found, remove the content from the @global $post's post_content field
     2024 *
     2025 * @since 3.6.0
     2026 *
     2027 * @param string $type Required. 'audio' or 'video'
     2028 * @return string
     2029 */
     2030function get_the_media( $type ) {
     2031        $post = get_post();
     2032        if ( empty( $post ) )
     2033                return '';
     2034
     2035        if ( has_post_format( $type ) ) {
     2036                $meta = get_post_format_meta( $post->ID );
     2037                if ( ! empty( $meta['media'] ) ) {
     2038                        if ( is_numeric( $meta['media'] ) ) {
     2039                                $url = wp_get_attachment_url( $meta['media'] );
     2040                                $shortcode = sprintf( '[%s src="%s"]', $type, $url );
     2041                        } elseif ( preg_match( '/' . get_shortcode_regex() . '/s', $meta['media'] ) ) {
     2042                                $shortcode = $meta['media'];
     2043                        } elseif ( preg_match( '#<[^>]+>#', $meta['media'] ) ) {
     2044                                return $meta['media'];
     2045                        } elseif ( 0 === strpos( $meta['media'], 'http' ) ) {
     2046                                $shortcode = sprintf( '[%s src="%s"]', $type, $meta['media'] );
     2047                        }
     2048
     2049                        if ( ! empty( $shortcode ) )
     2050                                return do_shortcode( $shortcode );
     2051                }
     2052        }
     2053
     2054        $medias = call_user_func( 'get_attached_' . $type );
     2055        if ( ! empty( $medias ) ) {
     2056                $media = reset( $medias );
     2057                $url = wp_get_attachment_url( $media->ID );
     2058                $shortcode = sprintf( '[%s src="%s"]', $type, $url );
     2059                return do_shortcode( $shortcode );
     2060        }
     2061
     2062        // these functions expected a reference, not a value
     2063        $content =& $post->post_content;
     2064
     2065        $htmls = get_content_media( $type, $content );
     2066        if ( ! empty( $htmls ) ) {
     2067                $html = reset( $htmls );
     2068                return $html;
     2069        }
     2070
     2071        $embeds = get_embedded_media( $type, $content );
     2072        if ( ! empty( $embeds ) ) {
     2073                $embed = reset( $embeds );
     2074                if ( 0 === strpos( $embed, 'http' ) ) {
     2075                        $shortcode = sprintf( '[%s src="%s"]', $type, $embed );
     2076                        return do_shortcode( $shortcode );
     2077                } else {
     2078                        return $embed;
     2079                }
     2080        }
     2081
     2082        return '';
     2083}
     2084
     2085/**
     2086 * Output the first video in the current (@global) post's content
     2087 *
     2088 * @since 3.6.0
     2089 *
     2090 */
     2091function the_video() {
     2092        echo get_the_media( 'video' );
     2093}
     2094/**
     2095 * Output the first audio  in the current (@global) post's content
     2096 *
     2097 * @since 3.6.0
     2098 *
     2099 */
     2100function the_audio() {
     2101        echo get_the_media( 'audio' );
     2102}
     2103
     2104/**
    20042105 * Retrieve images attached to the passed post
    20052106 *
    20062107 * @since 3.6.0
    function get_attached_image_srcs( $post_id = 0 ) { 
    20332134}
    20342135
    20352136/**
    2036  * Check the content blob for image srcs
     2137 * Check the content blob for images or image srcs
    20372138 *
    20382139 * @since 3.6.0
    20392140 *
    20402141 * @param string $content A string which might contain image data.
     2142 * @param boolean $html Whether to return HTML or URLs
    20412143 * @param boolean $remove Whether to remove the found data from the passed content.
    20422144 * @param int $limit Optional. The number of image srcs to return
    2043  * @return array The found image srcs
     2145 * @return array The found images or srcs
    20442146 */
    2045 function get_content_images( &$content, $remove = false, $limit = 0 ) {
    2046         $src = '';
    2047         $srcs = array();
     2147function get_content_images( &$content, $html = true, $remove = false, $limit = 0 ) {
    20482148        $matches = array();
     2149        $tags = array();
     2150        $captions = array();
    20492151
    20502152        if ( $remove && preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) {
    2051                 $captions = array();
    20522153                foreach ( $matches as $shortcode ) {
    20532154                        if ( 'caption' === $shortcode[2] )
    20542155                                $captions[] = $shortcode[0];
    function get_content_images( &$content, $remove = false, $limit = 0 ) { 
    20682169                                $content = str_replace( $tag[0], '', $content, $count );
    20692170                        }
    20702171
    2071                         preg_match( '#src=[\'"](.+?)[\'"]#is', $tag[0], $src );
    2072                         if ( ! empty( $src[1] ) ) {
    2073                                 $srcs[] = $src[1];
    2074                                 if ( $limit > 0 && count( $srcs ) >= $limit )
    2075                                         break;
    2076                         }
     2172                        $tags[] = $tag[0];
     2173
     2174                        if ( $limit > 0 && count( $tags ) >= $limit )
     2175                                break;
     2176                }
     2177        }
     2178
     2179        if ( $html )
     2180                return $tags;
     2181
     2182        $src = '';
     2183        $srcs = array();
     2184
     2185        foreach ( $tags as $tag ) {
     2186                preg_match( '#src=[\'"](.+?)[\'"]#is', $tag, $src );
     2187                if ( ! empty( $src[1] ) ) {
     2188                        $srcs[] = $src[1];
     2189                        if ( $limit > 0 && count( $srcs ) >= $limit )
     2190                                break;
    20772191                }
    20782192        }
    20792193
    function get_content_images( &$content, $remove = false, $limit = 0 ) { 
    20812195}
    20822196
    20832197/**
    2084  * Check the content blob for image srcs and return the first
     2198 * Check the content blob for images or srcs and return the first
    20852199 *
    20862200 * @since 3.6.0
    20872201 *
    20882202 * @param string $content A string which might contain image data.
     2203 * @param boolean $html Whether to return HTML or URLs
    20892204 * @param boolean $remove Whether to remove the found data from the passed content.
    20902205 * @return string The found data
    20912206 */
    2092 function get_content_image( &$content, $remove = false ) {
    2093         $srcs = get_content_images( $content, $remove, 1 );
     2207function get_content_image( &$content, $html = true, $remove = false ) {
     2208        $srcs = get_content_images( $content, $html, $remove, 1 );
    20942209        if ( empty( $srcs ) )
    20952210                return '';
    20962211
    function get_post_gallery_images( $post_id = 0 ) { 
    22052320                return array();
    22062321
    22072322        return $gallery['src'];
     2323}
     2324
     2325/**
     2326 * Output the first image in the current (@global) post's content
     2327 *
     2328 * @since 3.6.0
     2329 *
     2330 * @param string $attached_size If an attached image is found, the size to display it.
     2331 */
     2332function the_image( $attached_size = 'full' ) {
     2333        $post = get_post();
     2334        if ( empty( $post ) )
     2335                return '';
     2336
     2337        $medias = get_attached_images();
     2338        if ( ! empty( $medias ) ) {
     2339                $media = reset( $medias );
     2340                echo wp_get_attachment_image( $media->ID, $attached_size );
     2341                return;
     2342        }
     2343
     2344        $content =& $post->post_content;
     2345        $htmls = get_content_images( $content );
     2346        if ( ! empty( $htmls ) ) {
     2347                $html = reset( $htmls );
     2348                echo $html;
     2349        }
    22082350}
     2351 No newline at end of file