WordPress.org

Make WordPress Core

Ticket #24202: 24202.8.diff

File 24202.8.diff, 16.2 KB (added by aaroncampbell, 12 months ago)
  • wp-includes/media.php

     
    857857 
    858858        $default_types = wp_get_audio_extensions(); 
    859859        $defaults_atts = array( 'src' => '' ); 
    860         foreach ( $default_types as $type  ) 
     860        foreach ( $default_types as $type ) 
    861861                $defaults_atts[$type] = ''; 
    862862 
    863863        $atts = shortcode_atts( $defaults_atts, $attr, 'audio' ); 
     
    963963                'width' => empty( $content_width ) ? 640 : $content_width, 
    964964        ); 
    965965 
    966         foreach ( $default_types as $type  ) 
     966        foreach ( $default_types as $type ) 
    967967                $defaults_atts[$type] = ''; 
    968968 
    969969        $atts = shortcode_atts( $defaults_atts, $attr, 'video' ); 
     
    14441444        $args['path'] = $path; 
    14451445 
    14461446        if ( ! isset( $args['mime_type'] ) ) { 
    1447                 $file_info  = wp_check_filetype( $args['path'] ); 
     1447                $file_info = wp_check_filetype( $args['path'] ); 
    14481448 
    14491449                // If $file_info['type'] is false, then we let the editor attempt to 
    14501450                // figure out the file type, rather than forcing a failure based on extension. 
     
    14731473 * @since 3.5.0 
    14741474 * @access public 
    14751475 * 
    1476  * @param string|array $args Array of requirements.  Accepts { 'mime_type'=>string, 'methods'=>{string, string, ...} } 
     1476 * @param string|array $args Array of requirements. Accepts { 'mime_type'=>string, 'methods'=>{string, string, ...} } 
    14771477 * @return boolean true if an eligible editor is found; false otherwise 
    14781478 */ 
    14791479function wp_image_editor_supports( $args = array() ) { 
     
    18421842 * @since 3.6.0 
    18431843 * 
    18441844 * @param string $type (Mime) type of media desired 
    1845  * @param int $post_id  Post ID 
     1845 * @param mixed $post Post ID or object 
    18461846 * @return array Found attachments 
    18471847 */ 
    1848 function get_attached_media( $type, $post_id = 0 ) { 
    1849         if ( ! $post = get_post( $post_id ) ) 
    1850                 return; 
     1848function get_attached_media( $type, $post = 0 ) { 
     1849        if ( ! $post = get_post( $post ) ) 
     1850                return array(); 
    18511851 
    18521852        $args = array( 
    18531853                'post_parent' => $post->ID, 
     
    18661866} 
    18671867 
    18681868/** 
    1869  * Extract and parse {media type} shortcodes or srcs from the passed content 
     1869 * Check the content blob for an <audio>, <video> <object>, <embed>, or <iframe> 
    18701870 * 
    18711871 * @since 3.6.0 
    18721872 * 
    1873  * @param string $type Type of media: audio or video 
    18741873 * @param string $content A string which might contain media data. 
    1875  * @param boolean $html Whether to return HTML or URLs 
    1876  * @param int $limit Optional. The number of medias to return 
    1877  * @return array A list of parsed shortcodes or extracted srcs 
     1874 * @param array $types array of media types: 'audio', 'video', 'object', 'embed', or 'iframe' 
     1875 * @return array A list of found HTML media embeds 
    18781876 */ 
    1879 function get_content_media( $type, $content, $html = true, $limit = 0 ) { 
    1880         $items = array(); 
     1877function get_media_embedded_in_content( $content, $types = null ) { 
     1878        $html = array(); 
     1879        $allowed_media_types = array( 'audio', 'video', 'object', 'embed', 'iframe' ); 
    18811880 
    1882         if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { 
    1883                 foreach ( $matches as $shortcode ) { 
    1884                         if ( $type === $shortcode[2] ) { 
    1885                                 $count = 1; 
    1886  
    1887                                 $items[] = do_shortcode_tag( $shortcode ); 
    1888                                 if ( $limit > 0 && count( $items ) >= $limit ) 
    1889                                         break; 
    1890                         } 
    1891                 } 
     1881        if ( ! empty( $types ) ) { 
     1882                if ( ! is_array( $types ) ) 
     1883                        $types = array( $types ); 
     1884                $allowed_media_types = array_intersect( $allowed_media_types, $types ); 
    18921885        } 
    18931886 
    1894         if ( $html ) 
    1895                 return $items; 
    1896  
    1897         $data = array(); 
    1898  
    1899         foreach ( $items as $item ) { 
    1900                 preg_match_all( '#src=([\'"])(.+?)\1#is', $item, $src, PREG_SET_ORDER ); 
    1901                 if ( ! empty( $src ) ) { 
    1902                         $srcs = array(); 
    1903                         foreach ( $src as $s ) 
    1904                                 $srcs[] = $s[2]; 
    1905  
    1906                         $data[] = array_values( array_unique( $srcs ) ); 
    1907                 } 
    1908         } 
    1909  
    1910         return $data; 
    1911 } 
    1912  
    1913 /** 
    1914  * Check the content blob for an <{media type}>, <object>, <embed>, or <iframe>, in that order 
    1915  * If no HTML tag is found, check the first line of the post for a URL 
    1916  * 
    1917  * @since 3.6.0 
    1918  * 
    1919  * @param string $type Type of media: audio or video 
    1920  * @param string $content A string which might contain media data. 
    1921  * @param int $limit Optional. The number of galleries to return 
    1922  * @return array A list of found HTML media embeds and possibly a URL by itself 
    1923  */ 
    1924 function get_embedded_media( $type, $content, $limit = 0 ) { 
    1925         $html = array(); 
    1926  
    1927         foreach ( array( $type, 'object', 'embed', 'iframe' ) as $tag ) { 
     1887        foreach ( $allowed_media_types as $tag ) { 
    19281888                if ( preg_match( '#' . get_tag_regex( $tag ) . '#', $content, $matches ) ) { 
    19291889                        $html[] = $matches[0]; 
    1930  
    1931                         if ( $limit > 0 && count( $html ) >= $limit ) 
    1932                                 break; 
    19331890                } 
    19341891        } 
    19351892 
    1936         if ( ! empty( $html ) && count( $html ) >= $limit ) 
    1937                 return $html; 
    1938  
    1939         $lines = explode( "\n", trim( $content ) ); 
    1940         $line = trim( array_shift( $lines  ) ); 
    1941         if ( 0 === stripos( $line, 'http' ) ) { 
    1942                 $html[] = $line; 
    1943         } 
    19441893        return $html; 
    19451894} 
    19461895 
    19471896/** 
    1948  * Extract the HTML or <source> srcs from the content's [audio] 
    1949  * 
    1950  * @since 3.6.0 
    1951  * 
    1952  * @param string $content A string which might contain audio data. 
    1953  * @param boolean $html Whether to return HTML or URLs 
    1954  * @return array A list of lists. Each item has a list of HTML or srcs corresponding 
    1955  *              to an [audio]'s HTML or primary src and specified fallbacks 
    1956  */ 
    1957 function get_content_audio( $content, $html = true ) { 
    1958         return get_content_media( 'audio', $content, $html ); 
    1959 } 
    1960  
    1961 /** 
    1962  * Check the content blob for an <audio>, <object>, <embed>, or <iframe>, in that order 
    1963  * If no HTML tag is found, check the first line of the post for a URL 
    1964  * 
    1965  * @since 3.6.0 
    1966  * 
    1967  * @param string $content A string which might contain audio data. 
    1968  * @return array A list of found HTML audio embeds and possibly a URL by itself 
    1969  */ 
    1970 function get_embedded_audio( $content ) { 
    1971         return get_embedded_media( 'audio', $content ); 
    1972 } 
    1973  
    1974 /** 
    1975  * Extract the HTML or <source> srcs from the content's [video] 
    1976  * 
    1977  * @since 3.6.0 
    1978  * 
    1979  * @param string $content A string which might contain video data. 
    1980  * @param boolean $html Whether to return HTML or URLs 
    1981  * @return array A list of lists. Each item has a list of HTML or srcs corresponding 
    1982  *              to a [video]'s HTML or primary src and specified fallbacks 
    1983  */ 
    1984 function get_content_video( $content, $html = true ) { 
    1985         return get_content_media( 'video', $content, $html ); 
    1986 } 
    1987  
    1988 /** 
    1989  * Check the content blob for a <video>, <object>, <embed>, or <iframe>, in that order 
    1990  * If no HTML tag is found, check the first line of the post for a URL 
    1991  * 
    1992  * @since 3.6.0 
    1993  * 
    1994  * @param string $content A string which might contain video data. 
    1995  * @return array A list of found HTML video embeds and possibly a URL by itself 
    1996  */ 
    1997 function get_embedded_video( $content ) { 
    1998         return get_embedded_media( 'video', $content ); 
    1999 } 
    2000  
    2001 /** 
    2002  * Retrieve images attached to the passed post 
    2003  * 
    2004  * @since 3.6.0 
    2005  * 
    2006  * @param int $post_id Optional. Post ID. 
    2007  * @return array Found image attachments 
    2008  */ 
    2009 function get_attached_image_srcs( $post_id = 0 ) { 
    2010         $children = get_attached_media( 'image', $post_id ); 
    2011         if ( empty( $children ) ) 
    2012                 return array(); 
    2013  
    2014         $srcs = array(); 
    2015         foreach ( $children as $attachment ) 
    2016                 $srcs[] = wp_get_attachment_url( $attachment->ID ); 
    2017  
    2018         return $srcs; 
    2019 } 
    2020  
    2021 /** 
    20221897 * Check the content blob for images or image srcs 
    20231898 * 
    20241899 * @since 3.6.0 
    20251900 * 
    20261901 * @param string $content A string which might contain image data. 
    20271902 * @param boolean $html Whether to return HTML or URLs in the array 
    2028  * @param int $limit Optional. The number of image srcs to return 
    20291903 * @return array The found images or srcs 
    20301904 */ 
    2031 function get_content_images( $content, $html = true, $limit = 0 ) { 
     1905function get_images_in_content( $content, $html = true ) { 
    20321906        $tags = array(); 
    20331907        $captions = array(); 
    20341908 
    2035         if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { 
     1909        if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) ) { 
    20361910                foreach ( $matches as $shortcode ) { 
    20371911                        if ( 'caption' === $shortcode[2] ) { 
    20381912                                $captions[] = $shortcode[0]; 
    20391913                                if ( $html ) 
    20401914                                        $tags[] = do_shortcode_tag( $shortcode ); 
    20411915                        } 
    2042  
    2043                         if ( $limit > 0 && count( $tags ) >= $limit ) 
    2044                                 break; 
    20451916                } 
    20461917        } 
    20471918 
    20481919        foreach ( array( 'a', 'img' ) as $tag ) { 
    2049                 if ( preg_match_all( '#' . get_tag_regex( $tag ) .  '#i', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { 
     1920                if ( preg_match_all( '#' . get_tag_regex( $tag ) . '#i', $content, $matches, PREG_SET_ORDER ) ) { 
    20501921                        foreach ( $matches as $node ) { 
    20511922                                if ( ! strstr( $node[0], '<img ' ) ) 
    20521923                                        continue; 
     
    20621933 
    20631934                                if ( ! $found ) 
    20641935                                        $tags[] = $node[0]; 
    2065  
    2066                                 if ( $limit > 0 && count( $tags ) >= $limit ) 
    2067                                         break 2; 
    20681936                        } 
    20691937                } 
    20701938        } 
     
    20721940        if ( $html ) 
    20731941                return $tags; 
    20741942 
    2075         $srcs = array(); 
     1943        $image_srcs = array(); 
    20761944 
    20771945        foreach ( $tags as $tag ) { 
    20781946                preg_match( '#src=([\'"])(.+?)\1#is', $tag, $src ); 
    2079                 if ( ! empty( $src[2] ) ) { 
    2080                         $srcs[] = $src[2]; 
    2081                         if ( $limit > 0 && count( $srcs ) >= $limit ) 
    2082                                 break; 
    2083                 } 
     1947                if ( ! empty( $src[2] ) ) 
     1948                        $image_srcs[] = $src[2]; 
    20841949        } 
    20851950 
    2086         return apply_filters( 'content_images', array_values( array_unique( $srcs ) ), $content ); 
     1951        $image_srcs = array_values( array_unique( $image_srcs ) ); 
     1952        return apply_filters( 'get_images_in_content', $image_srcs, $content ); 
    20871953} 
    20881954 
    20891955/** 
     
    20951961 * @param boolean $html Whether to return HTML or URLs 
    20961962 * @return string The found data 
    20971963 */ 
    2098 function get_content_image( $content, $html = true ) { 
    2099         $srcs = get_content_images( $content, $html, 1 ); 
    2100         if ( empty( $srcs ) ) 
    2101                 return ''; 
    2102  
    2103         return apply_filters( 'content_image', reset( $srcs ), $content ); 
     1964function get_image_in_content( $content, $html = true ) { 
     1965        $srcs = get_images_from_content( $content, $html ); 
     1966        return apply_filters( 'get_image_in_content', reset( $srcs ), $content ); 
    21041967} 
    21051968 
    21061969/** 
    2107  * Check the content blob for galleries and return their image srcs 
     1970 * Retrieve galleries from the passed post's content 
    21081971 * 
    21091972 * @since 3.6.0 
    21101973 * 
    2111  * @param string $content A string which might contain image data. 
     1974 * @param mixed $post Optional. Post ID or object. 
    21121975 * @param boolean $html Whether to return HTML or data in the array 
    2113  * @param int $limit Optional. The number of galleries to return 
    2114  * @return array A list of galleries, which in turn are a list of their srcs in order 
     1976 * @return array A list of arrays, each containing gallery data and srcs parsed 
     1977 *              from the expanded shortcode 
    21151978 */ 
    2116 function get_content_galleries( $content, $html = true, $limit = 0 ) { 
     1979function get_post_galleries( $post, $html = true ) { 
     1980        if ( ! $post = get_post( $post ) ) 
     1981                return array(); 
     1982 
     1983        if ( ! has_shortcode( $post->post_content, 'gallery' ) ) 
     1984                return array(); 
     1985 
    21171986        $galleries = array(); 
    2118  
    2119         if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { 
     1987        if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $post->post_content, $matches, PREG_SET_ORDER ) ) { 
    21201988                foreach ( $matches as $shortcode ) { 
    21211989                        if ( 'gallery' === $shortcode[2] ) { 
    21221990                                $srcs = array(); 
    21231991                                $count = 1; 
    21241992 
    2125                                 $data = shortcode_parse_atts( $shortcode[3] ); 
    21261993                                $gallery = do_shortcode_tag( $shortcode ); 
    21271994                                if ( $html ) { 
    21281995                                        $galleries[] = $gallery; 
     
    21332000                                                        $srcs[] = $s[2]; 
    21342001                                        } 
    21352002 
     2003                                        $data = shortcode_parse_atts( $shortcode[3] ); 
    21362004                                        $data['src'] = array_values( array_unique( $srcs ) ); 
    21372005                                        $galleries[] = $data; 
    21382006                                } 
    2139  
    2140                                 if ( $limit > 0 && count( $galleries ) >= $limit ) 
    2141                                         break; 
    21422007                        } 
    21432008                } 
    21442009        } 
    21452010 
    2146         return apply_filters( 'content_galleries', $galleries, $content ); 
     2011        return apply_filters( 'get_post_galleries', $galleries, $post ); 
    21472012} 
    21482013 
    21492014/** 
    2150  * Retrieve galleries from the passed post's content 
     2015 * Check a specified post's content for gallery and, if present, return the first 
    21512016 * 
    21522017 * @since 3.6.0 
    21532018 * 
    2154  * @param int $post_id Optional. Post ID. 
    2155  * @param boolean $html Whether to return HTML or data in the array 
    2156  * @return array A list of arrays, each containing gallery data and srcs parsed 
    2157  *              from the expanded shortcode 
     2019 * @param mixed $post Optional. Post ID or object. 
     2020 * @param boolean $html Whether to return HTML or data 
     2021 * @return string|array Gallery data and srcs parsed from the expanded shortcode 
    21582022 */ 
    2159 function get_post_galleries( $post_id = 0, $html = true ) { 
    2160         if ( ! $post = get_post( $post_id ) ) 
    2161                 return array(); 
     2023function get_post_gallery( $post = 0, $html = true ) { 
     2024        $galleries = get_post_galleries( $post, $html ); 
     2025        $gallery = reset( $galleries ); 
    21622026 
    2163         if ( ! has_shortcode( $post->post_content, 'gallery' )  ) 
    2164                 return array(); 
    2165  
    2166         return get_content_galleries( $post->post_content, $html ); 
     2027        return apply_filters( 'get_post_gallery', $gallery, $post, $galleries ); 
    21672028} 
    21682029 
    21692030/** 
     
    21712032 * 
    21722033 * @since 3.6.0 
    21732034 * 
    2174  * @param int $post_id Optional. Post ID. 
     2035 * @param mixed $post Optional. Post ID or object. 
    21752036 * @return array A list of lists, each containing image srcs parsed 
    21762037 *              from an expanded shortcode 
    21772038 */ 
    2178 function get_post_galleries_images( $post_id = 0 ) { 
    2179         if ( ! $post = get_post( $post_id ) ) 
    2180                 return array(); 
    2181  
    2182         if ( ! has_shortcode( $post->post_content, 'gallery' )  ) 
    2183                 return array(); 
    2184  
    2185         $data = get_content_galleries( $post->post_content, false ); 
    2186         return wp_list_pluck( $data, 'src' ); 
     2039function get_post_galleries_images( $post = 0 ) { 
     2040        $galleries = get_post_galleries( $post, false ); 
     2041        return wp_list_pluck( $galleries, 'src' ); 
    21872042} 
    21882043 
    21892044/** 
    2190  * Check a specified post's content for gallery and, if present, return the first 
    2191  * 
    2192  * @since 3.6.0 
    2193  * 
    2194  * @param int $post_id Optional. Post ID. 
    2195  * @param boolean $html Whether to return HTML or data 
    2196  * @return string|array Gallery data and srcs parsed from the expanded shortcode 
    2197  */ 
    2198 function get_post_gallery( $post_id = 0, $html = true ) { 
    2199         if ( ! $post = get_post( $post_id ) ) 
    2200                 return $html ? '' : array(); 
    2201  
    2202         if ( ! has_shortcode( $post->post_content, 'gallery' ) ) 
    2203                 return $html ? '' : array(); 
    2204  
    2205         $data = get_content_galleries( $post->post_content, $html, false, 1 ); 
    2206         return reset( $data ); 
    2207 } 
    2208  
    2209 /** 
    22102045 * Check a post's content for galleries and return the image srcs for the first found gallery 
    22112046 * 
    22122047 * @since 3.6.0 
    22132048 * 
    2214  * @param int $post_id Optional. Post ID. 
     2049 * @param mixed $post Optional. Post ID or object. 
    22152050 * @return array A list of a gallery's image srcs in order 
    22162051 */ 
    2217 function get_post_gallery_images( $post_id = 0 ) { 
    2218         $gallery = get_post_gallery( $post_id, false ); 
    2219         if ( empty( $gallery['src'] ) ) 
    2220                 return array(); 
    2221  
    2222         return $gallery['src']; 
     2052function get_post_gallery_images( $post = 0 ) { 
     2053        $galleries = get_post_gallery( $post, false ); 
     2054        return empty( $gallery['src'] ) ? array() : $gallery['src']; 
    22232055} 
  • wp-includes/post-formats.php

     
    243243 * @param string $content A string which might contain a URL. 
    244244 * @return string The found URL. 
    245245 */ 
    246 function get_content_url( $content ) { 
     246function get_url_in_content( $content ) { 
    247247        if ( empty( $content ) ) 
    248248                return ''; 
    249249 
    250         // the content is a URL 
     250        // the content is a URL in its entirety 
    251251        $trimmed = trim( $content ); 
    252252        if ( 0 === stripos( $trimmed, 'http' ) && ! preg_match( '#\s#', $trimmed ) ) { 
    253                 return $trimmed; 
     253                return esc_url_raw( $trimmed ); 
    254254 
    255255        // the content is HTML so we grab the first href 
    256256        } elseif ( preg_match( '/<a\s[^>]*?href=([\'"])(.+?)\1/is', $content, $matches ) ) { 
     
    264264        if ( 0 === stripos( $line, 'http' ) ) 
    265265                return esc_url_raw( $line ); 
    266266 
    267         return ''; 
     267        return false; 
    268268} 
    269269 
    270270/** 
  • wp-content/themes/twentythirteen/functions.php

     
    484484/** 
    485485 * Returns the URL from the post. 
    486486 * 
    487  * @uses get_content_url() to get the URL in the post meta (if it exists) or 
     487 * @uses get_url_in_content() to get the URL in the post meta (if it exists) or 
    488488 * the first link found in the post content. 
    489489 * 
    490490 * Falls back to the post permalink if no URL is found in the post. 
     
    495495 */ 
    496496function twentythirteen_get_link_url() { 
    497497        $content = get_the_content(); 
    498         $has_url = get_content_url( $content ); 
     498        $has_url = get_url_in_content( $content ); 
    499499 
    500500        return ( $has_url ) ? $has_url : apply_filters( 'the_permalink', get_permalink() ); 
    501501}