当我们再使用第三方存储的缩图功能时,wordpress本身的缩略图片生成就没有必要了,这可以节约服务器的开销。
这个功能是在我们护维GoldPoster的时候使用到的功能,GoldPoster是一个电影海报网络,每天会上传大量的超大图片,如果再使用本身wordpress的缩略图功能,无疑会给网站带来巨大的压力。
这段代码就是让wordpress误以为自己已经生成了缩略图。
class Fake {
public function run() {
\add_filter( 'intermediate_image_sizes_advanced', [ $this, 'getRegisteredImageSizes' ] );
\add_filter( 'wp_generate_attachment_metadata', [ $this, 'fakeImageResize' ] );
}
public function getRegisteredImageSizes( $sizes ) {
$this->sizes = $sizes;
return [ ];
}
public function fakeImageResize( $metadata ) {
foreach ( $this->sizes as $name => $size ) {
// figure out what size WP would make this:
$newsize = \image_resize_dimensions( $metadata['width'], $metadata['height'], $size['width'], $size['height'], $size['crop'] );
if ( $newsize ) {
$uploads = \wp_upload_dir( null, false );
$file = pathinfo( realpath( $uploads['basedir'] . DIRECTORY_SEPARATOR . $metadata['file'] ) );
// build the fake meta entry for the size in question
$metadata['sizes'][ $name ] = [
'file' => sprintf( '%s-%sx%s.%s', $file['filename'], $newsize[4], $newsize[5], $file['extension'] ),
'width' => $newsize[4],
'height' => $newsize[5],
];
}
}
return $metadata;
}
}
可以直接将这个代码放到functions.php,也可以做成插件使用。