我编写了一个插件,允许用户上传。zip文件,如果该文件已经在uploads文件夹中,它将删除内容,在那里上载新的zip文件,然后解压缩。
插件可以正常工作,但我注意到,每次我上传文件时,它都会保留在媒体库中,即使它已从uploads文件夹中删除。因此,uploads文件夹可能为空,但它仍显示在媒体库中。以下是替换文件的代码:
//first, check if there\'s an existing directory
if (file_exists($upload_dir . "PDF-archive")){
//if the directory exists, delete all the files inside
$file_names = glob($upload_dir . "PDF-archive/*");
foreach ($file_names as $files){
if (is_file($files)){
unlink($files);
}
}
}
else {
//if directory doesn\'t exist, create a new one
$pdf_archive_dir = $temp[\'basedir\'];
$pdf_archive_dir = $pdf_archive_dir . \'/PDF-archive\';
wp_mkdir_p($pdf_archive_dir);
}
//directory is created and empty, now add files and unzip them
rename($uploaded_file_path, $new_file_path); //move zip files into new directory
unzip_zips($uploaded_file_name); //unzips the uploaded file
}
我假设媒体库保存到数据库。。。有没有办法确保它也被删除?就像我说的那样,它可以工作,但客户端每天都会添加一个新的zip文件,所以我希望避免媒体库中有50多个条目,即使它们不存在于uploads文件夹中。
旁注:我对这方面还很陌生,所以如果您看到我的代码有问题,我将非常感谢您的反馈。谢谢
最合适的回答,由SO网友:David Sword 整理而成
Wordpress将媒体库保存在_posts
表-您将看到post_type
属于attachment
用于媒体库项目。你会注意到guid
行中的值,这是媒体项的默认URL。
虽然unlink()
\'如果要删除文件,可以创建文件的完整URL。然后在简单的数据库查询中使用该完整URL($wpdb
) 声明WHERE guid = \'$thefullURL\'
. 这将返回该行,您将能够获得ID
媒体库项目的。
具有ID
您可以使用Wordpress的wp_delete_post()
(这将从库中删除_postmeta
行话)