同一张 2MB 的产品图,运营把 cover.jpg 改名成 cover-final.jpg 再上传,媒体库多出一条记录,附件 ID 相差 40,磁盘上多存一份。两个文件 md5 完全相同。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,WordPress 判断重复只看文件名,wp_unique_filename 发现同名就加后缀,从不比较文件内容。改个名字等于全新文件,哈希值根本没参与这一步。
「媒体库哈希查重」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
sha256sum cover.jpg # 按哈希找已有附件(自定义字段存过 hash) wp post list --post_type=attachment --meta_key=file_hash --meta_value=<hash> --format=ids
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
具体做法是,上传前在客户端算一次 SHA-256 把结果塞进表单字段;服务端按哈希查已有附件 命中就复用原附件 ID;命中后把新文件名记成别名 别让运营以为没传上去。
最后用这个标准收尾,改名重传后媒体库条数不增加,返回值是已有附件 ID,磁盘没有多出第二份文件。
