2016-06-30 10 views
17

से फ़ाइलों को हटाएं हमने एक कस्टम पोस्ट प्रकार बनाया है जो हमारे क्लाइंट को मानक वर्डप्रेस अपलोड फ़ोल्डर (wp-content/upload-assets) के बाहर किसी फ़ोल्डर में फ़ाइलों को अपलोड करने की अनुमति देता है। इन फ़ाइलों को मानक WP-content/अपलोड फ़ोल्डर से अलग से नियंत्रित किया जा करने के लिए कर रहे हैं और यही कारण है कि हम WP-config.php मेंवर्डप्रेस 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) में हैं।

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-सामग्री/अपलोड-संपत्ति फ़ोल्डर में फ़ाइलों को हटा दें wp_delete_attachment करते हैं:

यहाँ हमारे my_upload_dir समारोह के लिए कोड है?

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

मैं इस कोड का परीक्षण नहीं किया है, लेकिन मैं आशा है कि यह काम करना चाहिए

संबंधित मुद्दे