Lazyload post thumbnails

时间:2015-12-08 作者:N00b

我的目标是延迟加载缩略图。如中所示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?

2 个回复
最合适的回答,由SO网友:flomei 整理而成

你得到了你需要的一切,只需建立你自己的img-元素如下:

if ( has_post_thumbnail() ) { 
   $class = \'lazy 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=+";

   echo \'<img src="\'.$placeholder.\'" data-original="\'.$src.\'" class="\'.$class.\'" />\';
}
除此之外,您的主要性能问题可能是每次要显示图像时都会生成一个新的占位符。为此,请使用本地文件,它的大小只有几个字节,但可以为您节省额外的请求(包括所有开销)。

SO网友:jgraup

如何修改我的代码,以便使用\\u post\\u缩略图直接获取src并将其指定为原始数据?

您可以使用str_replacepreg_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;

相关推荐

Remove <p></p> after images

我对<p></p> 出现在my之后的标记<img....>. 以下是我在本地主机上查看生成的页面时显示的内容。。。<img src=\"/wp-content/themes/wunderful/assets/images/feedback-danielle.png\" alt=\"Danielle Johnson Deal Town FC Treasurer\"> <p></p> 请注意随机生成的<p>&