WordPress 升级 4.4 之后,推出了 srcset 这个图片多屏自适应功能之后,默认会生成四个版本的缩略图,分别为:

  • thumbnail:缩略图大小;
  • medium:中等大小;
  • large:大尺寸;
  • medium_large:固定值宽768,高度不限制;

前三种版本大家都很熟悉了,进入 WP后台 —> 设置 —> 媒体,可以看到图片的大小设置:

上面设置的含义:

1)缩略图大小(thumbnail),都设置成了0,表示禁用了缩略图裁剪

2)中等大小(medium),宽度设置成了 768,高度为0(不限),表示以宽度为准,高度自适应调整缩放比例,另保持跟默认的 medium_large_size_w = 768 一致,共用一张图

3)大尺寸(large),都设置成了0,表示禁用了大图裁剪

 

第四种 medium_large,进入WP数据库,搜索wp_options表medium_large_size_w可以看到。

或者进入WordPress上帝模式,也可以看到 medium_large_size_w 

WordPress上帝模式:https://你的域名/wp-admin/options.php

例如,米扑博客的后台上帝模式(需要登录到管理后台):

https://blog.mimvp.com/wp-admin/options.php

由以上列表可以看出,如果我们上传一张足够大的图片,就会产生至少四张缩略图,为什么这里说是至少?

因为适应不同大小的屏幕,有时要根据图片比例不同而生成不同的尺寸。

但是,上传一张图片要生成多个不同尺寸的图片,这是何等的浪费空间!

 

WordPress 禁用自动裁剪缩略图片

为了禁用自动裁剪多张缩略图片,占用大量磁盘空间,以及迁移维护成本,需要禁用掉自动裁剪缩略图片功能。

通常我们只需在多媒体设置页面将所有尺寸设置为0,就能禁用缩略图裁剪:

但是上图这种方法,无法禁用 medium_large 版本,其数据写入了数据库,解决办法有三种:

方法1:

进入上帝模式,修改 medium_large_size_w 为 0,然后保存,会自动写入到数据库里

上帝模式:https://你的域名/wp-admin/options.php

 

方法2:

登录数据库 搜索wp_options表medium_large_size_w,或在phpMyAdmin中搜索medium_large_size_w将值修改为0,

select * from wp_options where option_name = 'medium_large_size_w';

MariaDB [mimvp-blog]> select * from wp_options where option_name = 'medium_large_size_w';
+-----------------+---------------------+--------------+----------+
| option_id       | option_name         | option_value | autoload |
+-----------------+---------------------+--------------+----------+
| 246673192502538 | medium_large_size_w | 768          | yes      |
+-----------------+---------------------+--------------+----------+

通过MySQl 语句修改 medium_large_size_w = 0

update wp_options set option_value = 0 where option_name = 'medium_large_size_w'; 

 

方法3:

在自己的WP主题文件下的 functons.php 文件中,加入以下代码来禁用:

function bzg_filter_image_sizes( $sizes ) {
	unset( $sizes['medium_large']);
	return $sizes;
}
add_filter( 'intermediate_image_sizes_advanced', 'bzg_filter_image_sizes' );

 

 

网上的方法

// 彻底禁止WordPress缩略图
add_filter( 'add_image_size', create_function( '', 'return 1;' ) );

网上的方法,可以解决缩略图、中等大小、大尺寸,但没法解决 medium_large_size_w 为 0,其解决方法见上面三种之一

 

在 WordPress 里面禁用任何函数的方法该如何做呢?

比如,你知道 WordPress 里面有个自带的功能函数叫 create_fun_core,你不想直接在 WordPress 核心文件中修改,防止升级后失效,那么用 add_filter 来解决是最好不过了!

// 禁用任意一个核心 create_fun_core 函数
add_filter( 'create_fun_core', create_function( '', 'return 1;' ) );

 

其实应该还有一个更简单的代码,原理都是利用 WordPress 的过滤器功能:

// 禁用 create_fun_core 函数
add_filter( 'create_fun_core', '__return_false' );

让这函数直接返回,不再继续往下执行。

 

 

参考推荐

Windows 和 WordPress 的上帝模式