修改WordPress插件PHP代码后,客户上传文件无法转至指定文件夹求助
问题解决建议
你的代码存在几处关键问题,修正后即可实现文件上传到指定文件夹的需求:
1. 错误调用wp_upload_dir()的路径参数
$wordpress_upload_dir是wp_upload_dir()返回的数组,你直接用$wordpress_upload_dir['/wp-content/uploads/clientimages']是无效的,应该用数组内置的basedir键(对应uploads文件夹的服务器根路径)来拼接目标文件夹路径:
// 错误写法 $new_file_path = $wordpress_upload_dir['/wp-content/uploads/clientimages'] . '/' . $file_image['name']; // 正确写法 $target_dir = $wordpress_upload_dir['basedir'] . '/clientimages'; $new_file_path = $target_dir . '/' . $file_image['name'];
2. 未确保目标文件夹存在且权限正确
如果clientimages文件夹不存在,或者服务器没有写入权限,文件无法完成上传。需要在使用前检查并创建文件夹:
// 检查并递归创建目标文件夹,设置合适权限 if (!file_exists($target_dir)) { mkdir($target_dir, 0755, true); }
3. 缺少文件移动的核心逻辑
你只定义了目标路径,但没有把临时上传的文件移动到目标位置,必须添加move_uploaded_file()函数完成这一步:
// 移动临时文件到目标路径 if (move_uploaded_file($file_image['tmp_name'], $new_file_path)) { // 上传成功后的可选逻辑,比如记录文件信息 } else { die('文件移动失败,请检查文件夹权限'); }
完整修正后的代码片段
if( ! empty( $_FILES['vicode-file-field']['name'] ) ) { // WordPress 运行环境 require( dirname(__FILE__) . '/../../../wp-load.php' ); $wordpress_upload_dir = wp_upload_dir(); $i = 1; // 当存在同名文件时的重试次数 $file_image = $_FILES['vicode-file-field']; // 定义目标文件夹路径 $target_dir = $wordpress_upload_dir['basedir'] . '/clientimages'; // 检查并创建文件夹 if (!file_exists($target_dir)) { mkdir($target_dir, 0755, true); } $new_file_path = $target_dir . '/' . $file_image['name']; $new_file_mime = mime_content_type( $file_image['tmp_name'] ); if( empty( $file_image ) ) die( '未选择文件。' ); if( $file_image['error'] ) die( $file_image['error'] ); if( $file_image['size'] > wp_max_upload_size() ) die( '文件超出预期大小。' ); if( !in_array( $new_file_mime, get_allowed_mime_types() ) ) die( 'WordPress 不允许此类文件上传。' ); // 处理同名文件 while( file_exists( $new_file_path ) ) { $i++; $new_file_path = $target_dir . '/' . $i . '_' . $file_image['name']; } // 移动文件到目标文件夹 if (move_uploaded_file($file_image['tmp_name'], $new_file_path)) { echo '文件上传成功'; // 可选:如果需要将文件纳入WordPress媒体库管理,可在此添加wp_insert_attachment()逻辑 } else { die('文件上传失败,请检查服务器文件夹权限'); } }
额外注意事项
- 确保服务器对
clientimages文件夹有写入权限(推荐设置为0755或0775,避免使用0777) - 如果需要将文件纳入WordPress媒体库的管理体系,可以在上传成功后调用
wp_insert_attachment()函数,将文件信息同步到数据库中
内容的提问来源于stack exchange,提问作者Nina Marie
相关产品推荐
相关产品推荐

