Changeset 53751 for trunk/src/wp-includes/media.php
- Timestamp:
- 07/21/2022 06:01:01 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/media.php
r53715 r53751 1853 1853 } 1854 1854 1855 // Use alternate mime types when specified and available. 1856 if ( $attachment_id > 0 && _wp_in_front_end_context() ) { 1857 $filtered_image = wp_image_use_alternate_mime_types( $filtered_image, $context, $attachment_id ); 1858 } 1859 1855 1860 /** 1856 1861 * Filters an img tag within the content for a given context. … … 1897 1902 1898 1903 return $content; 1904 } 1905 1906 /** 1907 * Use alternate mime type images in the front end content output when available. 1908 * 1909 * @since 6.1.0 1910 * 1911 * @param string $image The HTML `img` tag where the attribute should be added. 1912 * @param string $context Additional context to pass to the filters. 1913 * @param int $attachment_id The attachment ID. 1914 * @return string Converted `img` tag with `loading` attribute added. 1915 */ 1916 function wp_image_use_alternate_mime_types( $image, $context, $attachment_id ) { 1917 $metadata = wp_get_attachment_metadata( $attachment_id ); 1918 if ( empty( $metadata['file'] ) ) { 1919 return $image; 1920 } 1921 1922 // Only alter images with a `sources` attribute 1923 if ( empty( $metadata['sources'] ) ) { 1924 return $image; 1925 }; 1926 1927 $target_mimes = array( 'image/webp', 'image/jpeg' ); 1928 1929 /** 1930 * Filter the content image mime type output selection and order. 1931 * 1932 * When outputting images in the content, the first mime type available will be used. 1933 * 1934 * @since 6.1.0 1935 * 1936 * @param array $target_mimes The image output mime type and order. Default is array( 'image/webp', 'image/jpeg' ). 1937 * @param int $attachment_id The attachment ID. 1938 * @param string $context Additional context to pass to the filters. 1939 * @return array The filtered output mime type and order. Return an empty array to skip mime type substitution. 1940 */ 1941 $target_mimes = apply_filters( 'wp_content_image_mimes', $target_mimes, $attachment_id, $context ); 1942 1943 if ( false === $target_mimes ) { 1944 return $image; 1945 } 1946 1947 // Find the appropriate size for the provided URL in the first available mime type. 1948 foreach ( $target_mimes as $target_mime ) { 1949 // Handle full size image replacement. 1950 if ( ! empty( $metadata['sources'][ $target_mime ]['file'] ) ) { 1951 $src_filename = wp_basename( $metadata['file'] ); 1952 1953 // This is the same MIME type as the original, so the entire $target_mime can be skipped. 1954 // Since it is already the preferred MIME type, the entire loop can be cancelled. 1955 if ( $metadata['sources'][ $target_mime ]['file'] === $src_filename ) { 1956 break; 1957 } 1958 1959 $image = str_replace( $src_filename, $metadata['sources'][ $target_mime ]['file'], $image ); 1960 1961 // The full size was replaced, so unset this entirely here so that in the next iteration it is no longer 1962 // considered, simply for a small performance optimization. 1963 unset( $metadata['sources'] ); 1964 } 1965 1966 // Go through each image size and replace with the first available mime type version. 1967 foreach ( $metadata['sizes'] as $name => $size_data ) { 1968 // Check if size has an original file. 1969 if ( empty( $size_data['file'] ) ) { 1970 continue; 1971 } 1972 1973 // Check if size has a source in the desired mime type. 1974 if ( empty( $size_data['sources'][ $target_mime ]['file'] ) ) { 1975 continue; 1976 } 1977 1978 $src_filename = wp_basename( $size_data['file'] ); 1979 1980 // This is the same MIME type as the original, so the entire $target_mime can be skipped. 1981 // Since it is already the preferred MIME type, the entire loop can be cancelled. 1982 if ( $size_data['sources'][ $target_mime ]['file'] === $src_filename ) { 1983 break 2; 1984 } 1985 1986 // Found a match, replace with the new filename. 1987 $image = str_replace( $src_filename, $size_data['sources'][ $target_mime ]['file'], $image ); 1988 1989 // This size was replaced, so unset this entirely here so that in the next iteration it is no longer 1990 // considered, simply for a small performance optimization. 1991 unset( $metadata['sizes'][ $name ] ); 1992 } 1993 } 1994 return $image; 1995 } 1996 1997 /** 1998 * Check if execution is currently in the front end content context, outside of <head>. 1999 * 2000 * @since 6.1.0 2001 * @access private 2002 * 2003 * @return bool True if in the front end content context, false otherwise. 2004 */ 2005 function _wp_in_front_end_context() { 2006 global $wp_query; 2007 2008 // Check if this request is generally outside (or before) any frontend context. 2009 if ( ! isset( $wp_query ) || defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || is_feed() ) { 2010 return false; 2011 } 2012 2013 // Check if we're anywhere before the 'wp_head' action has completed. 2014 return did_action( 'template_redirect' ) && ! doing_action( 'wp_head' ); 1899 2015 } 1900 2016
Note: See TracChangeset
for help on using the changeset viewer.