如何在WordPress中从缩放版图片复原原始图片?
解决方案:用现有缩放版替代丢失的WordPress原始图片
完全可以用你手头的高分辨率缩放版(1280x720/1200x900)作为新的原始文件,让WordPress插件能基于它重新生成所需尺寸。以下是实现你需求的PHP脚本(适配WordPress环境):
脚本核心功能
- 遍历所有媒体附件
- 自动检查原始图片文件是否存在
- 若原始文件丢失,复制指定尺寸的缩放版作为新的原始文件
- 重命名并更新WordPress附件元数据,确保系统识别新的原始文件
具体代码
<?php // 加载WordPress环境(单独运行脚本时需添加此行) require_once('wp-load.php'); // 获取所有图片类媒体附件 $attachments = get_posts([ 'post_type' => 'attachment', 'post_mime_type' => 'image', 'posts_per_page' => -1, 'post_status' => 'inherit' ]); // 逐个处理附件 foreach ($attachments as $attachment) { $meta = wp_get_attachment_metadata($attachment->ID); if (!$meta) continue; $upload_dir = wp_get_upload_dir(); $original_file = $upload_dir['basedir'] . '/' . $meta['file']; // 检查原始文件是否存在 if (file_exists($original_file)) { echo "附件ID {$attachment->ID}:原始文件存在,跳过<br>"; continue; } // 定位1200x900尺寸的缩放版文件 $target_thumbnail = ''; foreach ($meta['sizes'] as $size_data) { if ($size_data['width'] == 1200 && $size_data['height'] == 900) { $target_thumbnail = pathinfo($meta['file'], PATHINFO_DIRNAME) . '/' . $size_data['file']; break; } } if (!$target_thumbnail) { echo "附件ID {$attachment->ID}:未找到1200x900缩放版,跳过<br>"; continue; } $thumbnail_path = $upload_dir['basedir'] . '/' . $target_thumbnail; if (!file_exists($thumbnail_path)) { echo "附件ID {$attachment->ID}:1200x900缩放版文件不存在,跳过<br>"; continue; } // 复制缩放版作为新的原始文件 if (copy($thumbnail_path, $original_file)) { // 更新元数据,匹配新原始文件的尺寸 $updated_meta = $meta; $updated_meta['width'] = 1200; $updated_meta['height'] = 900; update_post_meta($attachment->ID, '_wp_attachment_metadata', $updated_meta); echo "附件ID {$attachment->ID}:已用1200x900缩放版重建原始文件<br>"; } else { echo "附件ID {$attachment->ID}:文件复制失败,跳过<br>"; } } echo "批量处理完成"; ?>
使用注意事项
- 备份优先:运行前务必备份所有图片文件和WordPress数据库,避免数据丢失。
- 路径适配:如果你的缩略图命名规则非默认(比如自定义后缀),需调整脚本中定位1200x900版本的逻辑。
- 测试先行:先针对单个附件测试脚本,确认功能正常后再批量处理所有附件。
- 再生尺寸:脚本运行完成后,可使用Regenerate Thumbnails等插件重新生成所需的图片尺寸。
内容的提问来源于stack exchange,提问作者pukos
相关产品推荐
相关产品推荐

