WordPress删除文章时移动文件:目标存在则追加序号重命名
WordPress删除文章时移动文件并自动重命名同名文件
以下是实现你需求的修改后完整代码,解决了同名文件的自动重命名问题:
add_action('before_delete_post', function ($id) { $rs_image_path = "/var/www/html/wp-content/uploads/hexon/"; $rs_image_dest_path = "/var/www/html/wp-content/uploads/wpallimport/files/images/"; $rs_image_filenames = get_field('afbeeldingen_bestandsnamen', $id); $rs_image_klantnummer = get_field('hexon_klantnummer', $id); // 空字段直接返回,避免无效操作 if (empty($rs_image_filenames) || empty($rs_image_klantnummer)) { return; } $variableAry = explode(", ", $rs_image_filenames); foreach ($variableAry as $rs_image_url) { $source_file = $rs_image_path . $rs_image_klantnummer . "/" . $rs_image_url; // 源文件不存在或不可读时跳过 if (!file_exists($source_file) || !is_readable($source_file)) { continue; } $dest_dir = $rs_image_dest_path . $rs_image_klantnummer . "/"; // 确保目标文件夹存在,不存在则递归创建 if (!file_exists($dest_dir)) { mkdir($dest_dir, 0755, true); } // 拆分文件名与扩展名,方便后续重命名 $file_info = pathinfo($rs_image_url); $filename = $file_info['filename']; $extension = isset($file_info['extension']) ? '.' . $file_info['extension'] : ''; $dest_file = $dest_dir . $rs_image_url; $counter = 1; // 循环检查目标文件是否存在,生成带序号的新文件名 while (file_exists($dest_file)) { $dest_file = $dest_dir . $filename . "-" . $counter . $extension; $counter++; } // 执行文件移动 rename($source_file, $dest_file); } });
关键修改点说明:
- 目标文件夹保障:新增目标文件夹创建逻辑,避免因文件夹不存在导致移动失败
- 同名文件处理:通过循环检测目标路径,若文件已存在则自动追加递增序号,直到找到可用的文件名
- 健壮性优化:增加空字段判断、源文件有效性检查,跳过无效操作
- 文件名拆分:使用
pathinfo分离文件名与扩展名,保证重命名时扩展名不会丢失
内容的提问来源于stack exchange,提问作者user2958073
相关产品推荐
相关产品推荐

