我来自面向对象的PHP和Laravel,现在我正在为Wordpress构建(我的第一个)插件。该插件已经具有基本的上传功能,该功能允许用户从磁盘上上传多个文件(照片),并从中创建wp-post(种类:附件),并附加一些其他信息:
$files = $_FILES["my_file_upload"];
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("upload_file" => $file);
$attachment_id = media_handle_upload("upload_file", 0);
if (is_wp_error($attachment_id)) {
// There was an error uploading the image.
echo "Error adding file";
} else {
// The image was uploaded successfully!
//Take the album id from the URL
if ($_GET['album_id'] != ''){
wp_update_post(
array(
'ID' => $attachment_id,
'post_parent' => $_GET['album_id']
)
);
echo 'id album'.$_GET['album_id'];
}
一切正常。问题是,如果用户上传到许多文件,则当然有可能内存不足。
我想做什么:
我想制作一个脚本(在Vue上很好,但我也可以在jQuery或纯js中做到),在用户选择了要上传的所有文件之后,就制作了一个脚本文件,然后通过AJAX请求,它每次(每个请求)每次添加一个文件,当然向用户显示添加x ---的文件1,依此类推。 我已经(上周)在Wp中使用AJAX了,一开始有点痛苦(我完全不知道WP中的所有ajax请求都必须通过本地WP AJAX处理程序传递),但我进行了整理。
我认为应该从以下内容开始:
var x = document.getElementById("my_file_upload");
if ('files' in x) {
if (x.files.length == 0) {
txt = "No file selected";
} else {
for (var i = 0; i < x.files.length; i++) {
// make an ajax request here for the first file,
// then when get the answer, take away the first file from the array and do
//the same to the second and so on...
如前所述,我在php中很好,但是对WP中的代码来说还很陌生,所以我问是否有人做了类似的事情并且有什么建议可以节省时间。