2016-06-30 118 views
17

我們創建了一個自定義文章類型,允許我們的客戶端將文件上傳到標準Wordpress上傳文件夾(wp-content/upload-assets)之外的文件夾。這些文件是從標準的wp-content /上傳文件夾seperately處理,這就是爲什麼我們不能在wp-config.php文件使用讓Wordpress wp_delete_attachment從預定義的自定義文件夾中刪除文件

define('UPLOADS', 'mycustomfolder'); 

相反,我們利用這個臨時更改上傳文件夾到的wp-content /上傳資產:

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-content /上傳資產文件夾中的文件?

+0

首先看看的GUID附件,如果他們確實是在自定義文件夾。 – Erevald

+0

@Ervald - 是的。自定義文件夾中! –

+0

您是否擁有與默認相同的權限? – Erevald

回答

3

留在當前問題的域中,您可以使用「get_attached_file」過濾器直接更改用於獲取要刪除的文件路徑的文件路徑字符串。具體添加此功能到您的functions.php

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

我還沒有測試此代碼,但我希望它應該工作

相關問題