2016-06-30 4 views
17

私たちは、クライアントが標準のWordpressアップロードフォルダ(wp-content/upload-assets)以外のフォルダにファイルをアップロードできるカスタム投稿タイプを作成しました。これらのファイルは、標準のwp-コンテンツ/アップロードフォルダから別々に扱われるべきであり、我々はのwp-config.phpの中Wordpressをwp​​_delete_attachmentにすると、あらかじめ定義されたカスタムフォルダからファイルが削除されます

define('UPLOADS', 'mycustomfolder'); 

を使用することができない理由です。我々は一時的にアップロードを変更するためにこれを使用する代わりに

はするフォルダWP-コンテンツ/アップロード-資産:

add_filter('upload_dir', 'my_upload_dir'); 
$uploaded_file = wp_handle_upload($_FILES['xxxx_image'], $upload_overrides); 
remove_filter('upload_dir', 'my_upload_dir'); 

私たちは、特定のポストからすべての添付ファイルを削除するには、これを使用している:

add_filter('upload_dir', 'my_upload_dir'); 
$attachments = get_posts(array(
      'post_type'  => 'attachment', 
      'posts_per_page' => -1, 
      'post_status' => 'any', 
      'post_parent' => $pid 
)); 

foreach ($attachments as $attachment) { 
    if (false === wp_delete_attachment($attachment->ID, true)) { 
     echo 'Attachment could not be deleted.'; 
    } 
} 
remove_filter('upload_dir', 'my_upload_dir'); 

wp_delete_attachmentは関連するすべてのファイルをディスクから削除する必要がありますが、私たちのファイルがカスタムフォルダ(wp-content/upload-assets)にあるため動作しません。

は、ここに私たちのmy_upload_dir関数のコードです:

function my_upload_dir($upload) { 
    $upload['subdir'] = ''; 
    $upload['basedir'] = WP_CONTENT_DIR; 
    $upload['baseurl'] = WP_CONTENT_URL; 
    $upload['path']  = $upload['basedir'] . '/upload-assets'; 
    $upload['url']  = $upload['baseurl'] . '/upload-assets'; 
    return $upload; 
} 

はどのように我々はwp_delete_attachmentは、当社独自のwp-コンテンツ/アップロード-資産フォルダ内のファイルを削除するのですか?

+0

最初に動作するはずです願っています。 – Erevald

+0

@Ervald - うん。確かにカスタムフォルダに! –

+0

そのフォルダへの正しいアクセス許可はデフォルトと同じですか? – Erevald

答えて

3

"get_attached_file"フィルタを使用して、削除するファイルのパスを取得するために使用するファイルパス文字列を直接変更することができます。具体的にはこの関数を関数に追加してください。

function sr_update_uploads_directory($file) 
{ 
    return str_replace("uploads", "upload-assets", $file) // Change path to upload-assets from uploads 
} 
add_filter('get_attached_file', 'sr_update_uploads_directory'); 

現在テストに時間がありません。だから、私にはそれを許してください。それが役に立てば幸い。 :)

4

こんにちはこの方法でファイルを削除することはできますが、添付ファイルに関連付けられたすべての投稿メタフィールド、タクソノミー、コメントなどは削除されません。

・ホープ、このヘルプ

foreach ($attachments as $attachment) { 
    if (false === wp_delete_attachment($attachment->ID, true)) { 
    $file = get_attached_file($attachment->ID); 
    $file = str_replace("uploads", "upload-assets", $file); 
    wp_delete_file($file); 
    } 
} 
私はこのコードをテストしていません

、しかし、私は彼らがカスタムフォルダに実際にある場合は、それにGUID添付ファイルを見て

関連する問題