使用media_handle_upload批量上传产品图库图片失败,需添加空上传校验
解决产品图库空上传字段触发错误的校验逻辑优化
你的问题出在代码对空上传场景的校验不足,直接上修改后的代码,关键优化点我会在后面说明:
// Upload Images Gallery if (!empty($_FILES['file']['name'])) { $files = $_FILES['file']; $attach_newupload_ids = []; // 初始化数组,避免未定义警告 foreach ($files['name'] as $key => $value) { // 校验:文件名存在 + 上传无错误 if (!empty($files['name'][$key]) && $files['error'][$key] === UPLOAD_ERR_OK) { $file = array( 'name' => $files['name'][$key], 'type' => $files['type'][$key], 'tmp_name' => $files['tmp_name'][$key], 'error' => $files['error'][$key], 'size' => $files['size'][$key] ); $_FILES = array("file" => $file); $newupload = my_handle_attachment("file", $post_id); // 只有处理成功返回有效ID时,才加入数组 if (!empty($newupload)) { $attach_newupload_ids[] = $newupload; } } } // 只有当有有效ID时,才更新图库meta if (!empty($attach_newupload_ids)) { $attach_ids = implode(',', $attach_newupload_ids); update_post_meta($post_id, '_product_image_gallery', $attach_ids); } // 如果你需要支持用户清空现有图库,可以加下面的逻辑 // else { // delete_post_meta($post_id, '_product_image_gallery'); // } }
关键优化点:
- 入口校验优化:把原来的
if ($_FILES)改成if (!empty($_FILES['file']['name'])),直接过滤掉完全没有选择文件的场景,根本不会进入处理逻辑 - 初始化数组:提前初始化
$attach_newupload_ids,避免循环中未定义的警告 - 上传有效性校验:新增
$files['error'][$key] === UPLOAD_ERR_OK判断,确保只处理上传成功的文件(比如避免文件过大、临时文件丢失等错误场景) - ID有效性判断:只有
my_handle_attachment返回有效ID时,才把值加入数组,避免空值或错误值混入 - 最终更新校验:只有数组不为空时才执行
update_post_meta,彻底避免空上传时生成无效的meta值
这样修改后,空上传字段时会直接跳过整个处理逻辑,不会触发错误,同时也保留了正常上传图片的功能。
内容的提问来源于stack exchange,提问作者Andrey Miller
相关产品推荐
相关产品推荐

