WordPress.org

Make WordPress Core

Ticket #23572: 23572-html.diff

File 23572-html.diff, 13.1 KB (added by wonderboymusic, 13 months ago)
  • wp-includes/media.php

    diff --git wp-includes/media.php wp-includes/media.php
    index 60677ba..8360502 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 ); 
    1852  
    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]; 
     1850                                        $content =& str_replace( $shortcode[0], '', $content, $count ); 
    18581851 
    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        $count = 1; 
     2036 
     2037        if ( has_post_format( $type ) ) { 
     2038                $meta = get_post_format_meta( $post->ID ); 
     2039                if ( ! empty( $meta['media'] ) ) { 
     2040                        if ( is_numeric( $meta['media'] ) ) { 
     2041                                $url = wp_get_attachment_url( $meta['media'] ); 
     2042                                $shortcode = sprintf( '[%s src="%s"]', $type, $url ); 
     2043                        } elseif ( preg_match( '/' . get_shortcode_regex() . '/s', $meta['media'] ) ) { 
     2044                                $shortcode = $meta['media']; 
     2045                        } elseif ( preg_match( '#<[^>]+>#', $meta['media'] ) ) { 
     2046                                return $meta['media']; 
     2047                        } elseif ( 0 === strpos( $meta['media'], 'http' ) ) { 
     2048                                $post->post_content = str_replace( $meta['media'], '', $post->post_content, $count ); 
     2049                                setup_postdata( $post ); 
     2050                                $shortcode = sprintf( '[%s src="%s"]', $type, $meta['media'] ); 
     2051                        } 
     2052 
     2053                        if ( ! empty( $shortcode ) ) 
     2054                                return do_shortcode( $shortcode ); 
     2055                } 
     2056        } 
     2057 
     2058        $medias = call_user_func( 'get_attached_' . $type ); 
     2059        if ( ! empty( $medias ) ) { 
     2060                $media = reset( $medias ); 
     2061                $url = wp_get_attachment_url( $media->ID ); 
     2062                $shortcode = sprintf( '[%s src="%s"]', $type, $url ); 
     2063                return do_shortcode( $shortcode ); 
     2064        } 
     2065 
     2066        // these functions expected a reference, not a value 
     2067        $content =& $post->post_content; 
     2068 
     2069        $htmls = get_content_media( $type, $content, true, true ); 
     2070        if ( ! empty( $htmls ) ) { 
     2071                $html = reset( $htmls ); 
     2072                $post->post_content = $content; 
     2073                setup_postdata( $post ); 
     2074                return $html; 
     2075        } 
     2076 
     2077        $embeds = get_embedded_media( $type, $content, true, 1 ); 
     2078        if ( ! empty( $embeds ) ) { 
     2079                $embed = reset( $embeds ); 
     2080                $post->post_content = $content; 
     2081                setup_postdata( $post ); 
     2082                if ( 0 === strpos( $embed, 'http' ) ) { 
     2083                        $shortcode = sprintf( '[%s src="%s"]', $type, $embed ); 
     2084                        return do_shortcode( $shortcode ); 
     2085                } else { 
     2086                        return $embed; 
     2087                } 
     2088        } 
     2089 
     2090        return ''; 
     2091} 
     2092 
     2093/** 
     2094 * Output the first video in the current (@global) post's content 
     2095 * 
     2096 * @since 3.6.0 
     2097 * 
     2098 */ 
     2099function the_video() { 
     2100        echo get_the_media( 'video' ); 
     2101} 
     2102/** 
     2103 * Output the first audio  in the current (@global) post's content 
     2104 * 
     2105 * @since 3.6.0 
     2106 * 
     2107 */ 
     2108function the_audio() { 
     2109        echo get_the_media( 'audio' ); 
     2110} 
     2111 
     2112/** 
    20042113 * Retrieve images attached to the passed post 
    20052114 * 
    20062115 * @since 3.6.0 
    function get_attached_image_srcs( $post_id = 0 ) { 
    20332142} 
    20342143 
    20352144/** 
    2036  * Check the content blob for image srcs 
     2145 * Check the content blob for images or image srcs 
    20372146 * 
    20382147 * @since 3.6.0 
    20392148 * 
    20402149 * @param string $content A string which might contain image data. 
     2150 * @param boolean $html Whether to return HTML or URLs 
    20412151 * @param boolean $remove Whether to remove the found data from the passed content. 
    20422152 * @param int $limit Optional. The number of image srcs to return 
    2043  * @return array The found image srcs 
     2153 * @return array The found images or srcs 
    20442154 */ 
    2045 function get_content_images( &$content, $remove = false, $limit = 0 ) { 
    2046         $src = ''; 
    2047         $srcs = array(); 
     2155function get_content_images( &$content, $html = true, $remove = false, $limit = 0 ) { 
    20482156        $matches = array(); 
     2157        $tags = array(); 
     2158        $captions = array(); 
    20492159 
    20502160        if ( $remove && preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { 
    2051                 $captions = array(); 
    20522161                foreach ( $matches as $shortcode ) { 
    20532162                        if ( 'caption' === $shortcode[2] ) 
    20542163                                $captions[] = $shortcode[0]; 
    function get_content_images( &$content, $remove = false, $limit = 0 ) { 
    20682177                                $content = str_replace( $tag[0], '', $content, $count ); 
    20692178                        } 
    20702179 
    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                         } 
     2180                        $tags[] = $tag[0]; 
     2181 
     2182                        if ( $limit > 0 && count( $tags ) >= $limit ) 
     2183                                break; 
     2184                } 
     2185        } 
     2186 
     2187        if ( $html ) 
     2188                return $tags; 
     2189 
     2190        $src = ''; 
     2191        $srcs = array(); 
     2192 
     2193        foreach ( $tags as $tag ) { 
     2194                preg_match( '#src=[\'"](.+?)[\'"]#is', $tag, $src ); 
     2195                if ( ! empty( $src[1] ) ) { 
     2196                        $srcs[] = $src[1]; 
     2197                        if ( $limit > 0 && count( $srcs ) >= $limit ) 
     2198                                break; 
    20772199                } 
    20782200        } 
    20792201 
    function get_content_images( &$content, $remove = false, $limit = 0 ) { 
    20812203} 
    20822204 
    20832205/** 
    2084  * Check the content blob for image srcs and return the first 
     2206 * Check the content blob for images or srcs and return the first 
    20852207 * 
    20862208 * @since 3.6.0 
    20872209 * 
    20882210 * @param string $content A string which might contain image data. 
     2211 * @param boolean $html Whether to return HTML or URLs 
    20892212 * @param boolean $remove Whether to remove the found data from the passed content. 
    20902213 * @return string The found data 
    20912214 */ 
    2092 function get_content_image( &$content, $remove = false ) { 
    2093         $srcs = get_content_images( $content, $remove, 1 ); 
     2215function get_content_image( &$content, $html = true, $remove = false ) { 
     2216        $srcs = get_content_images( $content, $html, $remove, 1 ); 
    20942217        if ( empty( $srcs ) ) 
    20952218                return ''; 
    20962219 
    function get_post_gallery_images( $post_id = 0 ) { 
    22052328                return array(); 
    22062329 
    22072330        return $gallery['src']; 
     2331} 
     2332 
     2333/** 
     2334 * Output the first image in the current (@global) post's content 
     2335 * 
     2336 * @since 3.6.0 
     2337 * 
     2338 * @param string $attached_size If an attached image is found, the size to display it. 
     2339 */ 
     2340function the_image( $attached_size = 'full' ) { 
     2341        $post =& get_post(); 
     2342        if ( empty( $post ) ) 
     2343                return ''; 
     2344 
     2345        $medias = get_attached_images(); 
     2346        if ( ! empty( $medias ) ) { 
     2347                $media = reset( $medias ); 
     2348                $sizes = get_intermediate_image_sizes(); 
     2349 
     2350                $urls = array(); 
     2351                foreach ( $sizes as $size ) { 
     2352                        $urls[] = reset( wp_get_attachment_image_src( $media->ID, $size ) ); 
     2353                        $urls[] = get_attachment_link( $media->ID ); 
     2354                } 
     2355 
     2356                $count = 1; 
     2357                $matches = array(); 
     2358                $content =& $post->post_content; 
     2359 
     2360                if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { 
     2361                        foreach ( $matches as $shortcode ) { 
     2362                                if ( 'caption' === $shortcode[2] ) { 
     2363                                        foreach ( $urls as $url ) { 
     2364                                                if ( strstr( $shortcode[0], $url ) ) 
     2365                                                        $content = str_replace( $shortcode[0], '', $content, $count ); 
     2366                                        } 
     2367                                } 
     2368                        } 
     2369                } 
     2370 
     2371                foreach ( array( 'a', 'img' ) as $tag ) { 
     2372                        if ( preg_match_all( '#' . get_tag_regex( $tag ) . '#', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { 
     2373                                foreach ( $matches as $match ) { 
     2374                                        foreach ( $urls as $url ) { 
     2375                                                if ( strstr( $match[0], $url ) ) 
     2376                                                        $content = str_replace( $match[0], '', $content, $count ); 
     2377                                        } 
     2378                                } 
     2379                        } 
     2380                } 
     2381 
     2382                $post->post_content = $content; 
     2383                setup_postdata( $post ); 
     2384 
     2385                echo wp_get_attachment_image( $media->ID, $attached_size ); 
     2386                return; 
     2387        } 
     2388 
     2389        $content =& $post->post_content; 
     2390        $htmls = get_content_images( $content, true, true, 1 ); 
     2391        if ( ! empty( $htmls ) ) { 
     2392                $html = reset( $htmls ); 
     2393                $post->post_content = $content; 
     2394                setup_postdata( $post ); 
     2395                echo $html; 
     2396        } 
    22082397} 
     2398 No newline at end of file