Wordpress调用wp_handle_upload上传图片仅返回空错误数组问题求解
问题原因
- 你传入
wp_handle_upload()的文件参数结构不符合函数要求:WordPress内置的wp_handle_upload()只接收单个文件的一维$_FILES结构,但你打印的$_FILES[Constants::$option_name]是嵌套结构,每一项属性(name/type/tmp_name等)下面还有一层logo的表单字段索引,所以函数无法识别正确的文件路径,也就无法完成上传逻辑。 - 该嵌套结构是因为你上传表单的input字段name属性设置为了数组格式(比如
name="xxx[logo]")导致的。
修复代码
你需要先把嵌套的文件信息提取出来,转换为函数要求的一维结构再调用上传接口:
if(!empty($_FILES[Constants::$option_name])) { // 提取logo字段的文件信息,转换为符合要求的一维结构 $file_info = array( 'name' => $_FILES[Constants::$option_name]['name']['logo'], 'type' => $_FILES[Constants::$option_name]['type']['logo'], 'tmp_name' => $_FILES[Constants::$option_name]['tmp_name']['logo'], 'error' => $_FILES[Constants::$option_name]['error']['logo'], 'size' => $_FILES[Constants::$option_name]['size']['logo'] ); $upload_overrides = array( 'test_form' => false ); $upload_result = wp_handle_upload($file_info, $upload_overrides); // 添加上传结果校验,避免未定义索引报错 if (isset($upload_result['url'])) { return $upload_result['url']; } // 上传失败时可根据需求返回错误信息或空值 return ''; }
补充说明
- 如果你的表单有多个上传字段,只需要把代码里的
logo替换成对应的字段名即可,每个文件单独调用一次wp_handle_upload()处理。 - 建议额外添加上传类型、大小校验,限制仅允许上传合规的图片格式,避免恶意文件上传风险。
内容的提问来源于stack exchange,提问作者Sjos Sivlingworkz
相关产品推荐
相关产品推荐

