私はユーザーが.zipファイルをアップロードすることを可能にするプラグインを書きました、そしてそのファイルがすでにuploadsフォルダーにあるならば、それは内容を消去し、そこに新しいZipファイルをアップロードし、そしてそれを解凍します。
プラグインは動作しますが、ファイルをアップロードするたびに、アップロードフォルダから削除されてもメディアライブラリに残っていることに気付きました。そのため、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ファイルを追加しようとしているので、それらがuploadsフォルダに存在しなくても、メディアライブラリに50以上のエントリを持たないようにしたい。
傍注:私はこれについてはかなり新しいので、あなたが私のコードに問題があるのを見つけたら、私はフィードバックをいただければと思います。ありがとうございます。
Wordpressはメディアライブラリを_posts
テーブルに保存します - メディアライブラリの項目にはattachment
のpost_type
が表示されます。行のguid
値に気付くでしょう。これはメディアアイテムのデフォルトURLです。
unlink()
があなたのファイルを作っている間、あなたはファイルの完全なURLを作ることができます。それから、その完全なURLを$wpdb
を示す単純なデータベースクエリ( WHERE guid = '$thefullURL'
)で使用します。これで行が返され、メディアライブラリアイテムのID
を取得できるようになります。
ID
を取得したら、Wordpressの wp_delete_post()
で削除することができます(これはライブラリから削除され、_postmeta
という用語も使用されます)