2016-06-30 42 views
17

Abbiamo creato un tipo di messaggio personalizzato che consente al nostro client di caricare file in una cartella al di fuori della cartella standard di upload di Wordpress (wp-content/upload-assets). Questi file devono essere gestite separatamente dalla cartella standard wp-content/uploads ed è per questo che non possiamo usareRendi Wordpress wp_delete_attachment elimina i file da una cartella personalizzata predefinita

define('UPLOADS', 'mycustomfolder'); 

nel wp-config.php.

Invece usiamo questo per modificare temporaneamente gli upload cartella wp-content/Carica-assets:

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

Stiamo usando questo per rimuovere tutti gli allegati da un posto particolare:

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 dovrebbe anche cancellare tutti i file associati dal disco ma non funziona perché i nostri file sono nella nostra cartella personalizzata (wp-content/upload-assets).

Ecco il codice per la nostra funzione 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; 
} 

come facciamo wp_delete_attachment rimuovere i file nella nostra cartella wp-content/upload personalizzati-asset?

+0

In primo luogo dare un'occhiata gli allegati GUID se sono davvero nella cartella personalizzata. – Erevald

+0

@Ervald - Sì. Sicuramente nella cartella personalizzata! –

+0

Avete i permessi giusti per quella cartella come quelli di default? – Erevald

risposta

3

Rimanendo nel dominio della domanda corrente è possibile utilizzare il filtro "get_attached_file" per modificare direttamente la stringa del percorso file utilizzata per catturare il percorso del file da eliminare. Specificamente aggiungi questa funzione alle tue funzioni.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'); 

Non ho tempo per il test al momento. Quindi, per favore scusami per quello. Spero che sia d'aiuto. :)

4

Ciao Puoi farlo in questo modo se desideri eliminare il file, ma non rimuoverà tutti i metadati del post, la tassonomia, i commenti, ecc. Associati all'allegato.

Spero che questo aiuto

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

non ho ancora testato questo codice, ma spero che dovrebbe funzionare