如何让WordPress媒体库直接从磁盘加载已恢复的图片?
解决WordPress磁盘恢复图片后媒体库不显示的问题
嘿,这个场景我太熟悉了——恢复了磁盘上的图片但数据库没记录,又不敢动整个数据库怕丢新内容,对吧?给你几个亲测有效的方案:
方案1:用Media Sync插件(最简单省心)
这是专门解决这类问题的工具,完全不会影响现有数据库里的内容:
- 登录WordPress后台,在插件市场搜索Media Sync并安装激活
- 进入「工具」→「Media Sync」页面,在设置里指定你要同步的目录(比如
wp-content/uploads/2017/01/),可以勾选「只显示不在媒体库的文件」来过滤 - 勾选需要恢复的图片,点击「Sync Selected」,插件会自动把这些文件的信息写入数据库,媒体库就能立刻看到它们了
方案2:手动写PHP脚本(适合不想依赖插件的用户)
如果不想用插件,可以写个轻量脚本批量把文件信息插入数据库:
- 在WordPress根目录新建一个文件,比如
sync-media.php - 粘贴下面的代码,记得把
$target_dir改成你要恢复的具体目录:
<?php require_once('wp-load.php'); // 替换成你要同步的目标目录 $upload_dir = wp_upload_dir(); $target_dir = $upload_dir['basedir'] . '/2017/01/'; $files = scandir($target_dir); foreach ($files as $file) { // 跳过目录本身和上级目录 if ($file == '.' || $file == '..') continue; $file_path = $target_dir . $file; $file_type = wp_check_filetype($file); // 准备附件基础数据 $attachment = array( 'post_mime_type' => $file_type['type'], 'post_title' => sanitize_file_name($file), 'post_content' => '', 'post_status' => 'inherit' ); // 插入到数据库 $attach_id = wp_insert_attachment($attachment, $file_path); // 自动生成缩略图和元数据 require_once(ABSPATH . 'wp-admin/includes/image.php'); $attach_data = wp_generate_attachment_metadata($attach_id, $file_path); wp_update_attachment_metadata($attach_id, $attach_data); echo "已同步文件:$file<br>"; } ?>
- 用浏览器访问你的域名+
/sync-media.php(比如https://yourdomain.com/sync-media.php),等待脚本执行完成 - 执行完一定要删除这个脚本,避免安全风险
方案3:用WP-CLI命令行(适合技术控)
如果你熟悉命令行,WP-CLI的效率会更高:
# 同步指定目录下的所有图片,自动跳过已在媒体库的文件 wp media import wp-content/uploads/2017/01/* --skip-duplicates
这个命令会自动扫描目录文件,把不在数据库的内容添加到媒体库,还会自动生成缩略图。
重要注意事项
- 不管用哪个方案,先备份当前数据库,虽然都是新增记录,但小心驶得万年船
- 确保恢复的图片文件权限正确,WordPress需要有读取权限(一般文件设为
644,目录设为755) - 如果图片有对应的缩略图文件,同步后媒体库会自动识别,不用单独处理
内容的提问来源于stack exchange,提问作者Luciano Fantuzzi
相关产品推荐
相关产品推荐

