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?
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 !!
Utilisez wp_delete_attachment
<?php wp_delete_attachment( $attachment_id ); ?>
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;
}