wp_image_add_srcset_and_sizes

函数
wp_image_add_srcset_and_sizes ( $image, $image_meta, $attachment_id )
参数
  • (string) $image An HTML 'img' element to be filtered.
    Required:
  • (array) $image_meta The image meta data as returned by 'wp_get_attachment_metadata()'.
    Required:
  • (int) $attachment_id Image attachment ID.
    Required:
返回值
  • (string) Converted 'img' element with 'srcset' and 'sizes' attributes added.
相关
  • wp_calculate_image_srcset()
  • wp_calculate_image_sizes()
定义位置
相关方法
wp_img_tag_add_srcset_and_sizes_attrwp_image_src_get_dimensionsimage_resizewp_get_active_and_valid_themeswp_img_tag_add_width_and_height_attr
引入
4.4.0
弃用
-

wp_image_add_srcset_and_sizes: 该函数用于为HTML图像元素添加srcset和size属性。它接收两个参数,图像元素的HTML代码和一个图像元数据数组,并返回添加了srcset和 sizes属性的修改后的HTML代码。

为现有的’img’元素添加’srcset’和’ sizes’属性。

function wp_image_add_srcset_and_sizes( $image, $image_meta, $attachment_id ) {
	// Ensure the image meta exists.
	if ( empty( $image_meta['sizes'] ) ) {
		return $image;
	}

	$image_src         = preg_match( '/src="([^"]+)"/', $image, $match_src ) ? $match_src[1] : '';
	list( $image_src ) = explode( '?', $image_src );

	// Return early if we couldn't get the image source.
	if ( ! $image_src ) {
		return $image;
	}

	// Bail early if an image has been inserted and later edited.
	if ( preg_match( '/-e[0-9]{13}/', $image_meta['file'], $img_edit_hash ) &&
		strpos( wp_basename( $image_src ), $img_edit_hash[0] ) === false ) {

		return $image;
	}

	$width  = preg_match( '/ width="([0-9]+)"/', $image, $match_width ) ? (int) $match_width[1] : 0;
	$height = preg_match( '/ height="([0-9]+)"/', $image, $match_height ) ? (int) $match_height[1] : 0;

	if ( $width && $height ) {
		$size_array = array( $width, $height );
	} else {
		$size_array = wp_image_src_get_dimensions( $image_src, $image_meta, $attachment_id );
		if ( ! $size_array ) {
			return $image;
		}
	}

	$srcset = wp_calculate_image_srcset( $size_array, $image_src, $image_meta, $attachment_id );

	if ( $srcset ) {
		// Check if there is already a 'sizes' attribute.
		$sizes = strpos( $image, ' sizes=' );

		if ( ! $sizes ) {
			$sizes = wp_calculate_image_sizes( $size_array, $image_src, $image_meta, $attachment_id );
		}
	}

	if ( $srcset && $sizes ) {
		// Format the 'srcset' and 'sizes' string and escape attributes.
		$attr = sprintf( ' srcset="%s"', esc_attr( $srcset ) );

		if ( is_string( $sizes ) ) {
			$attr .= sprintf( ' sizes="%s"', esc_attr( $sizes ) );
		}

		// Add the srcset and sizes attributes to the image markup.
		return preg_replace( '/<img ([^>]+?)[/ ]*>/', '<img $1' . $attr . ' />', $image );
	}

	return $image;
}

常见问题

FAQs
查看更多 >