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

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

发表回复