web-dev-qa-db-ger.com

Löschen von Bildern über den Upload-Ordner, aber nicht aus der Medienbibliothek

Ich habe ein Plugin geschrieben, mit dem ein Benutzer eine ZIP-Datei hochladen kann. Befindet sich diese Datei bereits im Upload-Ordner, wird der Inhalt gelöscht, die neue ZIP-Datei wird dort hochgeladen und anschließend entpackt.

Das Plugin funktioniert und alles, aber ich bemerke, dass es jedes Mal, wenn ich eine Datei hochlade, in der Medienbibliothek bleibt, obwohl es aus dem Upload-Ordner gelöscht wurde. Der Upload-Ordner könnte also leer sein, wird jedoch weiterhin in der Medienbibliothek angezeigt. Hier ist mein Code, um die Datei zu ersetzen:

 //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
      }

Ich gehe davon aus, dass die Medienbibliothek in der Datenbank gespeichert wird. Gibt es eine Möglichkeit, um sicherzustellen, dass sie auch von dort gelöscht wird? Wie gesagt, es funktioniert, aber der Client fügt jeden Tag eine neue Zip-Datei hinzu. Daher möchte ich vermeiden, dass mehr als 50 Einträge in der Medienbibliothek vorhanden sind, obwohl sie nicht im Upload-Ordner vorhanden sind.

Nebenbemerkung: Ich bin ziemlich neu in diesem Bereich. Wenn Sie also Probleme mit meinem Code sehen, würde ich mich über das Feedback freuen. Vielen Dank!

3
Coltvant

Wordpress speichert die Medienbibliothek in der Tabelle _posts - für Medienbibliothekselemente wird der post_type von attachment angezeigt. In der Zeile wird ein guid-Wert angezeigt, der die Standard-URL für Medienelemente darstellt.

Während unlink() Ihre Datei bearbeitet, können Sie die vollständige URL der Datei festlegen. Verwenden Sie dann diese vollständige URL in einer einfachen Datenbankabfrage ( $wpdb ), die WHERE guid = '$thefullURL' angibt. Dadurch wird die Zeile zurückgegeben, und Sie können die ID des Medienbibliothekselements abrufen.

Wenn Sie ID abgerufen haben, können Sie es mit Wordpress wp_delete_post() löschen (dies löscht aus der Bibliothek und enthält auch eine Reihe von _postmeta-Jargon).

3
David Sword