删除WordPress额外图片尺寸后自动清理无用附件元数据
WordPress 图片尺寸控制与元数据批量清理指南
一、先确认你阻止额外图片生成的代码是否生效
你添加的这段代码逻辑完全没问题!咱们来拆解下它的作用:
- 通过
intermediate_image_sizes_advanced过滤器直接移除了WordPress默认的4种中间尺寸(缩略图、中等、中大型、大型) - 利用
max_srcset_image_width设置为1,彻底禁用了自动生成多尺寸srcset的功能
验证生效的方法超简单:
- 随便上传一张新图片到媒体库
- 要么去服务器的上传目录(比如
wp-content/uploads/202X/XX)里看,有没有生成带-100x100、-700x700这类后缀的图片;要么直接看媒体库的图片详情,检查尺寸列表里是不是只剩原图 - 要是没生成这些额外尺寸,就说明代码已经稳稳生效啦!
二、批量清理已有图片的无用元数据(MySQL语句)
重要提醒!
执行任何数据库操作前,一定要先完整备份你的数据库!万一操作出问题,还能及时恢复,别嫌麻烦哈~
针对指定后缀的批量更新语句
下面的语句会帮你批量处理 wp_postmeta 表中 _wp_attachment_metadata 字段里的内容,精准移除包含 -100x100.jpg、-700x700.jpg 的尺寸条目:
-- 移除包含 -100x100.jpg 的元数据条目 UPDATE wp_postmeta SET meta_value = REGEXP_REPLACE( meta_value, '"([^"]*-100x100\\.jpg[^"]*)":\\{[^}]*\\},?', '' ) WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '%-100x100.jpg%'; -- 移除包含 -700x700.jpg 的元数据条目 UPDATE wp_postmeta SET meta_value = REGEXP_REPLACE( meta_value, '"([^"]*-700x700\\.jpg[^"]*)":\\{[^}]*\\},?', '' ) WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE '%-700x700.jpg%';
额外说明:
- 如果你还有其他要移除的后缀(比如
-300x300.jpg),直接复制上面的语句,把后缀替换成对应的就行,非常灵活 - 这个语句用到了
REGEXP_REPLACE,需要MySQL 8.0及以上版本支持。如果你的MySQL版本较低,要么升级版本,要么就得用更复杂的字符串拼接方式处理(不过还是建议升级,更省心) - 执行完后,记得抽查几条记录的
meta_value内容,确认无用的尺寸已经被删掉了 - 元数据清理完,别忘了去服务器的上传目录里手动删掉那些带后缀的无用图片文件,彻底释放存储空间
内容的提问来源于stack exchange,提问作者Pimpfru




