WordPress.org

Make WordPress Core

Ticket #24202: 24202.7.diff

File 24202.7.diff, 15.9 KB (added by aaroncampbell, 9 months ago)
  • 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} 
  • 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 * 
    18731873 * @param string $type Type of media: audio or video 
    18741874 * @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 
     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(); 
    1881  
    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                 } 
    1892         } 
    1893  
    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 ) { 
     1877function get_media_embedded_in_content( $content ) { 
    19251878        $html = array(); 
    19261879 
    1927         foreach ( array( $type, 'object', 'embed', 'iframe' ) as $tag ) { 
     1880        foreach ( array( 'audio', 'video', 'object', 'embed', 'iframe' ) as $tag ) { 
    19281881                if ( preg_match( '#' . get_tag_regex( $tag ) . '#', $content, $matches ) ) { 
    19291882                        $html[] = $matches[0]; 
    1930  
    1931                         if ( $limit > 0 && count( $html ) >= $limit ) 
    1932                                 break; 
    19331883                } 
    19341884        } 
    19351885 
    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         } 
    19441886        return $html; 
    19451887} 
    19461888 
    19471889/** 
    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 /** 
    20221890 * Check the content blob for images or image srcs 
    20231891 * 
    20241892 * @since 3.6.0 
    20251893 * 
    20261894 * @param string $content A string which might contain image data. 
    20271895 * @param boolean $html Whether to return HTML or URLs in the array 
    2028  * @param int $limit Optional. The number of image srcs to return 
    20291896 * @return array The found images or srcs 
    20301897 */ 
    2031 function get_content_images( $content, $html = true, $limit = 0 ) { 
     1898function get_images_in_content( $content, $html = true ) { 
    20321899        $tags = array(); 
    20331900        $captions = array(); 
    20341901 
    2035         if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { 
     1902        if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) ) { 
    20361903                foreach ( $matches as $shortcode ) { 
    20371904                        if ( 'caption' === $shortcode[2] ) { 
    20381905                                $captions[] = $shortcode[0]; 
    20391906                                if ( $html ) 
    20401907                                        $tags[] = do_shortcode_tag( $shortcode ); 
    20411908                        } 
    2042  
    2043                         if ( $limit > 0 && count( $tags ) >= $limit ) 
    2044                                 break; 
    20451909                } 
    20461910        } 
    20471911 
    20481912        foreach ( array( 'a', 'img' ) as $tag ) { 
    2049                 if ( preg_match_all( '#' . get_tag_regex( $tag ) .  '#i', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { 
     1913                if ( preg_match_all( '#' . get_tag_regex( $tag ) . '#i', $content, $matches, PREG_SET_ORDER ) ) { 
    20501914                        foreach ( $matches as $node ) { 
    20511915                                if ( ! strstr( $node[0], '<img ' ) ) 
    20521916                                        continue; 
     
    20621926 
    20631927                                if ( ! $found ) 
    20641928                                        $tags[] = $node[0]; 
    2065  
    2066                                 if ( $limit > 0 && count( $tags ) >= $limit ) 
    2067                                         break 2; 
    20681929                        } 
    20691930                } 
    20701931        } 
     
    20721933        if ( $html ) 
    20731934                return $tags; 
    20741935 
    2075         $srcs = array(); 
     1936        $image_srcs = array(); 
    20761937 
    20771938        foreach ( $tags as $tag ) { 
    20781939                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                 } 
     1940                if ( ! empty( $src[2] ) ) 
     1941                        $image_srcs[] = $src[2]; 
    20841942        } 
    20851943 
    2086         return apply_filters( 'content_images', array_values( array_unique( $srcs ) ), $content ); 
     1944        $image_srcs = array_values( array_unique( $image_srcs ) ); 
     1945        return apply_filters( 'get_images_in_content', $image_srcs, $content ); 
    20871946} 
    20881947 
    20891948/** 
     
    20951954 * @param boolean $html Whether to return HTML or URLs 
    20961955 * @return string The found data 
    20971956 */ 
    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 ); 
     1957function get_image_in_content( $content, $html = true ) { 
     1958        $srcs = get_images_from_content( $content, $html ); 
     1959        return apply_filters( 'get_image_in_content', reset( $srcs ), $content ); 
    21041960} 
    21051961 
    21061962/** 
    2107  * Check the content blob for galleries and return their image srcs 
     1963 * Retrieve galleries from the passed post's content 
    21081964 * 
    21091965 * @since 3.6.0 
    21101966 * 
    2111  * @param string $content A string which might contain image data. 
     1967 * @param mixed $post Optional. Post ID or object. 
    21121968 * @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 
     1969 * @return array A list of arrays, each containing gallery data and srcs parsed 
     1970 *              from the expanded shortcode 
    21151971 */ 
    2116 function get_content_galleries( $content, $html = true, $limit = 0 ) { 
     1972function get_post_galleries( $post, $html = true ) { 
     1973        if ( ! $post = get_post( $post ) ) 
     1974                return array(); 
     1975 
     1976        if ( ! has_shortcode( $post->post_content, 'gallery' ) ) 
     1977                return array(); 
     1978 
    21171979        $galleries = array(); 
    2118  
    2119         if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER ) && ! empty( $matches ) ) { 
     1980        if ( preg_match_all( '/' . get_shortcode_regex() . '/s', $post->post_content, $matches, PREG_SET_ORDER ) ) { 
    21201981                foreach ( $matches as $shortcode ) { 
    21211982                        if ( 'gallery' === $shortcode[2] ) { 
    21221983                                $srcs = array(); 
    21231984                                $count = 1; 
    21241985 
    2125                                 $data = shortcode_parse_atts( $shortcode[3] ); 
    21261986                                $gallery = do_shortcode_tag( $shortcode ); 
    21271987                                if ( $html ) { 
    21281988                                        $galleries[] = $gallery; 
     
    21331993                                                        $srcs[] = $s[2]; 
    21341994                                        } 
    21351995 
     1996                                        $data = shortcode_parse_atts( $shortcode[3] ); 
    21361997                                        $data['src'] = array_values( array_unique( $srcs ) ); 
    21371998                                        $galleries[] = $data; 
    21381999                                } 
    2139  
    2140                                 if ( $limit > 0 && count( $galleries ) >= $limit ) 
    2141                                         break; 
    21422000                        } 
    21432001                } 
    21442002        } 
    21452003 
    2146         return apply_filters( 'content_galleries', $galleries, $content ); 
     2004        return apply_filters( 'get_post_galleries', $galleries, $post ); 
    21472005} 
    21482006 
    21492007/** 
    2150  * Retrieve galleries from the passed post's content 
     2008 * Check a specified post's content for gallery and, if present, return the first 
    21512009 * 
    21522010 * @since 3.6.0 
    21532011 * 
    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 
     2012 * @param mixed $post Optional. Post ID or object. 
     2013 * @param boolean $html Whether to return HTML or data 
     2014 * @return string|array Gallery data and srcs parsed from the expanded shortcode 
    21582015 */ 
    2159 function get_post_galleries( $post_id = 0, $html = true ) { 
    2160         if ( ! $post = get_post( $post_id ) ) 
    2161                 return array(); 
     2016function get_post_gallery( $post = 0, $html = true ) { 
     2017        $galleries = get_post_galleries( $post, $html ); 
     2018        $gallery = reset( $galleries ); 
    21622019 
    2163         if ( ! has_shortcode( $post->post_content, 'gallery' )  ) 
    2164                 return array(); 
    2165  
    2166         return get_content_galleries( $post->post_content, $html ); 
     2020        return apply_filters( 'get_post_gallery', $gallery, $post, $galleries ); 
    21672021} 
    21682022 
    21692023/** 
     
    21712025 * 
    21722026 * @since 3.6.0 
    21732027 * 
    2174  * @param int $post_id Optional. Post ID. 
     2028 * @param mixed $post Optional. Post ID or object. 
    21752029 * @return array A list of lists, each containing image srcs parsed 
    21762030 *              from an expanded shortcode 
    21772031 */ 
    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' ); 
     2032function get_post_galleries_images( $post = 0 ) { 
     2033        $galleries = get_post_galleries( $post, false ); 
     2034        return wp_list_pluck( $galleries, 'src' ); 
    21872035} 
    21882036 
    21892037/** 
    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 /** 
    22102038 * Check a post's content for galleries and return the image srcs for the first found gallery 
    22112039 * 
    22122040 * @since 3.6.0 
    22132041 * 
    2214  * @param int $post_id Optional. Post ID. 
     2042 * @param mixed $post Optional. Post ID or object. 
    22152043 * @return array A list of a gallery's image srcs in order 
    22162044 */ 
    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']; 
     2045function get_post_gallery_images( $post = 0 ) { 
     2046        $galleries = get_post_gallery( $post, false ); 
     2047        return empty( $gallery['src'] ) ? array() : $gallery['src']; 
    22232048} 
  • 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/**