web-dev-qa-db-fra.com

Supprimer des images via le dossier de téléchargement, mais pas supprimer de la bibliothèque multimédia

J'ai écrit un plug-in qui permet à un utilisateur de télécharger un fichier .Zip. Si ce fichier se trouve déjà dans le dossier des téléchargements, il en effacera le contenu, y téléchargera le nouveau fichier Zip, puis le décompressera.

Le plugin fonctionne et tout, mais je remarque que chaque fois que je télécharge un fichier, celui-ci reste dans la médiathèque, même s'il est supprimé du dossier uploads. Ainsi, le dossier de téléchargement pourrait être vide, mais il reste affiché dans la médiathèque. Voici mon code pour remplacer le fichier:

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

Je suppose que la médiathèque enregistre dans la base de données ... y aurait-il un moyen de s'assurer qu'elle est également supprimée? Comme je l'ai dit, cela fonctionne, mais le client va ajouter un nouveau fichier Zip chaque jour. Je veux donc éviter d'avoir plus de 50 entrées dans la bibliothèque multimédia, même si elles n'existent pas dans le dossier de téléchargement.

Note: Je suis assez novice dans ce domaine, donc si vous rencontrez des problèmes avec mon code, je vous serais reconnaissant de vos commentaires. Merci!

3
Coltvant

Wordpress enregistre la bibliothèque multimédia dans la table _posts. Vous verrez alors post_type de attachment pour les éléments de la bibliothèque multimédia. Vous remarquerez une valeur guid dans la ligne, qui correspond à l'URL par défaut des éléments multimédias.

Pendant que unlink() 'votre fichier, vous pouvez créer l’URL complète du fichier. Ensuite, utilisez cette URL complète dans une requête de base de données simple ( $wpdb ) indiquant WHERE guid = '$thefullURL'. Cela renverra la ligne et vous pourrez obtenir la ID de l'élément de la bibliothèque multimédia.

Avec ID récupéré, vous pouvez ensuite le supprimer avec wp_delete_post() de Wordpress (ce qui supprimera de la bibliothèque et un tas de jargon _postmeta)

3
David Sword