媒体库里有 30 张图,文件名是 春季新品-主图.jpg,搜索框输入 春季 返回 0 条,输入 spring 能搜到。附件标题字段是空的,只有文件名带中文。日志里能对上时间点,这种反而好排。

媒体库搜索走 WP_Query 的默认字段,只查 post_title 和 post_content,不碰 guid 和磁盘文件名。标题空着时,中文文件名等于搜不到。这一点先确认清楚,后面就不用反复试。

add_filter('posts_search', function ($sql, $q) {
    if ($q->get('post_type') !== 'attachment') return $sql;
    return str_replace('wp_posts.post_title LIKE', 'wp_posts.guid LIKE', $sql);
}, 10, 2);

围绕「媒体库中文搜索」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

处理上按这个顺序:上传时把文件名写进附件标题 去掉扩展名和连字符;给 posts_search 加过滤器 把 guid 也纳入匹配;输入要求连续字符 别把关键词拆成单字。

结果对不对很好判断,媒体库输入 春季 能返回那张图,输入 spring 仍然正常。

作者 9823189