wp db query "SELECT post_id, meta_value FROM wp_postmeta pm LEFT JOIN wp_posts p ON p.ID=pm.meta_value WHERE pm.meta_key='_thumbnail_id' AND p.ID IS NULL;"
wp post meta delete <post_id> _thumbnail_id

清理媒体库删了 60 张旧图,首页文章卡片出现一片灰块,编辑器里特色图片位置显示空白框。数据库里 _thumbnail_id 还留着被删的附件 ID。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,删除附件时 WordPress 不会清理引用它的 _thumbnail_id 元数据,取图函数拿到 ID 后查不到文件就返回空。主题没做占位判断,卡片直接塌成灰色。

「特色图片 ID 悬空」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

处理上按这个顺序:按 _thumbnail_id 把已不存在的附件 ID 列出来;删掉悬空记录或者换成新的附件;主题输出前用 has_post_thumbnail 兜底 没有就显示默认图。

改完只确认一件事:首页卡片不再出现灰块,编辑器里特色图片区域提示未设置而不是空白框。

作者 9823189