WordPress 5.3 默认强制压缩大图?聊聊 一个解决插件:big_image_size_threshold
这两天在帮一个做摄影的朋友调试主题,遇到个挺邪门的问题:
明明上传的是一张 5K 分辨率的超高清全景图,丢到 Media Library 里之后,前端调用的图片居然莫名其妙变成了一张 2560px 高度的缩水版,文件名还被自动加了个 -scaled 后缀。
我第一反应是主题或者哪个缩略图插件在作妖,排查了一圈 functions.php 居然没发现 hook。后来去翻了下 WordPress 5.3 的 Changelog 才发现,原来是官方 Core 更新自带的“优化”。
问题根源:2560px 阈值
从 WP 5.3 开始,Core 里引入了一个新机制叫 Big Image Threshold。
逻辑很简单: 只要后端检测到你上传的图片宽或高超过 2560px,系统就默认判定这图“太大了,不适合 Web 展示”。于是它会在后台静默运行一个 Resize 进程,把你原本的高清图压到 2560px,然后把这张压缩图作为“Full Size”给前端调用。
初衷是好的:防止小白用户无脑传几百兆的印刷级图片把服务器 IO 跑满,或者把访客的浏览器卡死。
但问题是:这个逻辑有点“一刀切”。 对于普通博客没问题,但对于我们这种做 摄影站、设计作品集 或者 全屏视差滚动背景 的需求来说,这个 Feature 就变成 Bug 了。我们要的就是原图直出,谁让你帮我压缩了?
怎么解决?
这就到了大家最喜欢的 Fix 环节。要把这个功能干掉,把控制权拿回来,通常有两个路子。
方案一:硬编码(Hardcore 模式)
如果你是开发者,不想为了这点破事装个插件,直接在你的 functions.php 里丢一行代码就行:
PHP
add_filter( 'big_image_size_threshold', '__return_false' );
这行代码直接通过 Filter 把阈值检测给关了,简单粗暴,立竿见影。
方案二:插件流(懒人/交付模式)
如果你懒得动代码,或者这网站是交付给客户维护的(怕客户更新主题把代码覆盖了),那直接装个插件最稳。
推荐这个:Disable "Big Image Threshold"
这插件也是极简风格,源码估计都没几行。装上,启用,完事。没有任何设置选项,它的唯一作用就是 Hook 住上面那个阈值,让 WP 停止对大图的“自作主张”。
总结
性能优化固然重要,但不能以牺牲业务需求为代价。
如果你的站点是由于图片过大导致加载慢,正确的做法应该是上 CDN 或者用 WebP,而不是在上传阶段就把原图给废了。
如果你的业务场景需要展示 4K+ 的原图,赶紧把这个“隐藏功能”关了吧。