我不是wordpress的专家,我正在尝试创建一个前端表单,通过ajax将信息发送到我的php函数。我需要关于上传图片和文件作为帖子附件的帮助。
我的jQuery/Ajax正在将所有内容正确地发送到我的php文件中。我唯一不明白的是,为什么上传图像和文件的功能不同?
我的html输入相对命名为:
name="moreimages"
name="morefiles"
我将此php代码用于图像和文件
if ($_FILES)
{
// Get the upload images
$images = $_FILES[\'moreimages\'];
foreach ($images[\'name\'] as $key => $value)
{
if ($images[\'name\'][$key])
{
$image = array(
\'name\' => $images[\'name\'][$key],
\'type\' => $images[\'type\'][$key],
\'tmp_name\' => $images[\'tmp_name\'][$key],
\'error\' => $images[\'error\'][$key],
\'size\' => $images[\'size\'][$key]
);
$_FILES = array("moreimages" => $image);
foreach ($_FILES as $image => $array)
{
$newupload = project_images($image,$pid);
}
}
}
// Get the upload attachment files
$files = $_FILES[\'morefiles\'];
foreach ($files[\'name\'] as $key => $value)
{
if ($files[\'name\'][$key])
{
$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("morefiles" => $file);
foreach ($_FILES as $file => $array)
{
$uploadfile = project_file($file,$pid);
}
}
}
}
function project_images($file_handler, $pid)
{
if ($_FILES[$file_handler][\'error\'] !== UPLOAD_ERR_OK) __return_false();
require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/file.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/media.php\');
$image_id = media_handle_upload( $file_handler, $pid );
return $image_id;
}
function project_file($file_handler, $pid)
{
if ($_FILES[$file_handler][\'error\'] !== UPLOAD_ERR_OK) __return_false();
require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/file.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/media.php\');
$file_id = media_handle_upload( $file_handler, $pid );
//here is the only difference where I update the post meta
update_post_meta($file_id,\'is_prj_file\',\'1\');
return $file_id;
}
我看不出有什么问题。你能让我提出一个类似的问题吗?谢谢
最合适的回答,由SO网友:Tim Malone 整理而成
我在评论中提到了调试代码的重要性。原因如下:
首先添加图像。在图像添加部分,您正在运行以下代码行:
$_FILES = array("moreimages" => $image);
然后,当您开始添加文件的例程时,您可以从以下内容开始:
$files = $_FILES[\'morefiles\'];
你能看到这里出了什么问题吗?此时,
$_FILES
仅包含"moreimages"
没有别的了,因为你之前写得太多了。您可以简单地创建一个新变量,而不是重置$_FILES
(例如。$my_processed_images = array("moreimages" => $image);
然后foreach ($my_processed_images...
), 但是还有很多其他的事情可以做,以使这段代码更冗余,也更容易理解。
调试要点:print_r()
是你的朋友。例如,如果您希望一个变量包含某个内容,print_r($_FILES)
所以你可以看看它是否真的是。这将有助于避免数小时的头痛:)