当我们再使用第三方存储的缩图功能时,wordpress本身的缩略图片生成就没有必要了,这可以节约服务器的开销。
这个功能是在我们护维GoldPoster的时候使用到的功能,GoldPoster是一个电影海报网络,每天会上传大量的超大图片,如果再使用本身wordpress的缩略图功能,无疑会给网站带来巨大的压力。
这段代码就是让wordpress误以为自己已经生成了缩略图。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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,也可以做成插件使用。