我的目标是延迟加载缩略图。如中所示here, 我需要添加class="lazy"
, 占位符必须位于src
和延迟加载的图像data-original
.
此代码工作正常:
if ( has_post_thumbnail() ) {
$size = \'attachment-thumbnail-400-300\';
//Get thumbnail source
$thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), \'thumbnail-400-300\' );
$src = $thumb[\'0\'];
$placeholder = "//placehold.it/400x300/eee/222/&text=+";
$default_attr = array(
\'src\' => $placeholder,
\'data-original\' => $src,
\'class\' => "lazy $size",
);
the_post_thumbnail(\'thumbnail-400-300\', $default_attr);
}
默认情况下,这将获取源和所有内容:
the_post_thumbnail(\'thumbnail-400-300\');
我试图用多种不同的方式修改代码,但我只能用以下方法:
$thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), \'thumbnail-400-300\' );
$src = $thumb[\'0\'];
这似乎是我不需要的额外请求(我需要加载很多缩略图)。如何修改我的代码以获取
src
直接使用
the_post_thumbnail
并将其指定为
data-original
?
SO网友:jgraup
如何修改我的代码,以便使用\\u post\\u缩略图直接获取src并将其指定为原始数据?
您可以使用str_replace 和preg_match 具有get_the_post_thumbnail.
$size = \'attachment-thumbnail-400-300\';
$placeholder = \'src="//placehold.it/400x300/eee/222/&text=\'.urlencode(\'+\').\'"\';
$pattern = \'/src\\s*=\\s*"(.+?)"/\';
$thumb = get_the_post_thumbnail($post->ID , \'thumbnail-400-300\');
preg_match($pattern, $thumb, $matches, PREG_OFFSET_CAPTURE);
if ( ! empty($matches) ){
$src = $matches[0][0];
$thumb = str_replace( $src, $placeholder, $thumb );
$thumb = str_replace( \'class="\', \'class="\' . "lazy $size ", $thumb );
$data_original = str_replace( \'src="\', \'data-original="\', $src );
$thumb = str_replace( \' src="\', $data_original . \' src="\', $thumb );
}
echo $thumb;