web-dev-qa-db-ja.com

ユーザーがバックエンド内のアップロードされた画像を削除することを許可しますか?

私はユーザーが自分の画像をアップロードすることを許可しているので、私が使用している自分のアップロードされた画像を表示するために<?php echo $options_images['image_bg'];?> これを出力するhttp://www.mydomain.com/myfolder/wp-content/uploads/2013/05/deleteme.png。だから今私の画像は正しく表示されます。今私は私のユーザーを許可したい 削除する そのイメージとこれが私が惨めに失敗したところです。

問題:その画像を削除するにはunlink()関数を使わなければなりませんが実際に使うには 動的に取得するそのディレクトリのみ('wp-content/uploads/2013/05/deleteme.png';)の部分(間違っていたら訂正してください)。

どういうわけか (少なくとも考えます) 私は$options_images['image_bg']を読む必要があります 取り除く http://www.mydomain.com/

しかしその道もまた何でもあり得る
例えば、http://www.mydomain.com/wp-content/uploadshttp://www.mydomain.com/somefolder/someotherfolder/wp-content/uploadsなので、 動的に取得する somefolder/wp-content/uploads/2013/05/deleteme.png部分だけですが、私は持っています それを実現する方法がわかりません! 現在、私は自分のイメージを削除することができますが、私のパスを使用している場合に限り、次のようにハードコーディングされています。

<!--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');
}   
?>

私もこれを試したが、それは働いていない

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

私は画像アップロードのために私のテーマオプションの中でこの機能を使っています:

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

しかし、画像名は何でもかまいませんし、http://www.mydomain.com/は何にでも変更できるので(http://www.mydomain.com/folder/other_folder/and_other_folder)、これは当然のことです。

誰かが私をこれで手伝ってくれる?

1
Dejo Dekic

あなたの男はあなたの答えで私をたくさん助けてくれたのでこれは私が誰かが興味を持っているなら私がやった方法です:

<!--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-->

明らかに私はユーザーが画像を削除するかどうかを選択するかどうかを確認する必要がありますが、それは問題ではないはずです。 THXみんな!

0
Dejo Dekic

wp_delete_attachment を使用

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

私はあなたが今いるのと同じ問題を経験していました。

それから私はURLをパスに変換し、サーバーから画像やファイルを削除することを学びました。この関数を使ってURLをパスに変換し、うまく機能しています。

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