关闭WordPress本身服务器缩略图的生成功能

当我们再使用第三方存储的缩图功能时,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,也可以做成插件使用。

发表回复