web-dev-qa-db-fra.com

Autoriser les utilisateurs à supprimer les images téléchargées dans le backend?

J'autorise les utilisateurs à télécharger leurs images, afin de montrer leurs images téléchargées que j'utilise<?php echo $options_images['image_bg'];?> qui sort cette:http://www.mydomain.com/myfolder/wp-content/uploads/2013/05/deleteme.png. Alors maintenant, mon image est affichée correctement. Maintenant, je veux autoriser mes utilisateurs supprimer cette image et c’est là où j’ai lamentablement échoué.

Le problème: Pour supprimer cette image, je sais que je dois utiliser la fonction unlink(), mais pour pouvoir l'utiliser, il faut récupérer dynamiquementsa partie répertoire seulement ('wp-content/uploads/2013/05/deleteme.png';)(Corrigez-moi si je me trompe).

Donc en quelque sorte (Je pense au moins) je dois lire $options_images['image_bg'], puis se débarrasser de http://www.mydomain.com/

mais ce chemin peut aussi être n'importe quoi
par exemple: http://www.mydomain.com/wp-content/uploads ou http://www.mydomain.com/somefolder/someotherfolder/wp-content/uploads donc j’ai besoin de récupérer dynamiquement seulement somefolder/wp-content/uploads/2013/05/deleteme.png partie mais j'ai aucune idée de comment y parvenir! Actuellement, je peux supprimer mon image, mais uniquement lorsque j'utilise mon chemin codé en dur comme ceci:

<!--allow users to delete image
HARDCODED so it is a no go:(
-->      
<?php  $filename = 'wp-content/uploads/2013/05/deleteme.png';
if(file_exists('wp-content/uploads/2013/05/deleteme.png')){
unlink('wp-content/uploads/2013/05/deleteme.png');
}   
?>

J'ai aussi essayé mais ça ne marche pas

<?php  $filename = $options_images['image_bg'];
if(file_exists($filename)){
unlink($filename);
}   
?>

J'utilise cette fonction dans mes options de thème pour le téléchargement d'images:

//Validate our settings here
function validate_setting($plugin_options){ 

//echo '<pre>';  print_r($_FILES); echo '</pre>';
$keys = array_keys($_FILES);
$i = 0;
foreach ($_FILES as $image) {        
    //If file was uploaded...
if($image['size']){
    //Is it an image?
    if(preg_match('/(jpg|jpeg|png|gif)$/i',$image['type'])){
        $override = array('test_form' => false);
      $file = wp_handle_upload($image,$override);         
      $plugin_options[$keys[$i]] = $file['url'];
    }
   else{
   wp_die('No image found');
   }
}
else{
 $options = get_option('sandbox_theme_social_options');
 $plugin_options[$keys[$i]] = $options[$keys[$i]];
}
$i++;
    } 
    return $plugin_options;
    }

Mais évidemment, c'est un non-droit car les noms d'images peuvent être n'importe quoi et http://www.mydomain.com/peut être changé en n'importe quoi (http://www.mydomain.com/folder/other_folder/and_other_folder)

Quelqu'un peut-il m'aider avec ça?

1
Dejo Dekic

Parce que vous m'avez beaucoup aidé avec vos réponses, voici comment je l'ai fait si quelqu'un est intéressé:

<!--allow users to delete image-->
   <?php  $filename = $options_images['image_bg'];//Just storing my path to image here 
$urlparts = parse_url($filename );//I am getting rid of "http://www.mydomain.com" part here

   $extracted = $urlparts['path'];//Extracting my image path here 
   //So img path looks like this: /somefolder/wp-content/uploads/deleteme.png 
   //Only problem is dreaded trailing slash in front (this guy->/somefolder/)
   echo ltrim($extracted, '/');//We are getting rid of it via ltrim
   //Now image path looks like it should: somefolder/wp-content/uploads/deleteme.png 
   if(file_exists($extracted)){ //Now we can delete the images...
   unlink($extracted);
   }    
   ?><!--/allow users to delete image-->

Évidemment, je devrai vérifier si l'utilisateur choisit de supprimer l'image ou non, mais cela ne devrait pas poser de problème. THX les gars !!

0
Dejo Dekic

Utilisez wp_delete_attachment

<?php wp_delete_attachment( $attachment_id ); ?>
0
GhostToast

Je traversais le même problème que vous êtes maintenant.

Ensuite, j'ai appris à convertir l'URL en chemin et à supprimer toute image ou fichier du serveur. J'utilise cette fonction pour convertir l'URL en chemin et fonctionne très bien pour moi.

 function url_to_path_test($url){
  $url=str_replace(rtrim(get_site_url(),'/').'/', ABSPATH, $url);
 return $url;
 }
0
Vikas Bhardwaj