在列表页批量删了 200 篇旧文章,媒体库还留着八百多个附件,uploads 目录一点没变小。数据库里这些附件的 post_parent 还指向已删除的 ID。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,wp_delete_post 的第二个参数决定要不要连带删除附件,批量操作默认传的是 false。附件本身也是一条 post,父级没了它还在,就成了孤儿记录。

「wp_delete_post 附件残留」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

wp post delete 431 432 433 --force
wp post list --post_type=attachment --post_parent=431 --format=ids
wp post delete $(wp post list --post_type=attachment --format=ids) --force

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

具体做法是,删文章前先导出这批 ID 对应的附件列表,确认哪些还要留;确实要一起删的走 wp post delete --force,附件才会跟着进回收站再清除;清完顺手删掉指向空 ID 的 postmeta,别让它们一直堆着。

最后用这个标准收尾,媒体库里搜不到这批旧附件,uploads 目录体积明显下降。

作者 9823189