2016-06-02 21 views
6

Opracowałem wtyczkę, aw mojej wtyczce jest niestandardowy program do przesyłania plików. Kiedy przesyłam dowolny plik z mojego modułu do przesyłania wtyczek, ten plik jest przesyłany i zapisywany w domyślnym folderze WordPress uploads/.Jak zmienić katalog przesyłania w moim narzędziu do pobierania wtyczek

Ale chcę, że kiedy załadować plik z mojego wtyczki przesyłającej te pliki powinny być przesłane w nowym folderze wewnątrz Wordpress zwyczaj uploads folderze Więc wyszukiwania Google i znalazłem ten kod:

<?php 
    function upload_dir($dirs)          
{                
     $dirs['subdir'] = '/my-uploads';     
     $dirs['path'] = $dirs['basedir'] . '/my-uploads'; 
     $dirs['url'] = $dirs['baseurl'] . '/my-uploads'; 

     return $dirs;           
}                

add_filter('upload_dir', 'upload_dir');      

    ?> 

Teraz wszystkie pliki które są przesyłane z (postów, stron itp.) są również przechowywane w tym folderze wtyczek.

chcę, że tylko te pliki, które zostały załadowane z mojego wtyczki przesyłającej powinny być zapisane w tym my-folder, a reszta pliki powinny być zapisane w folderze domyślnym WordPress uploads ...

Odpowiedz

6

Tuż przed kodem przesyłania, używać

add_filter('upload_dir', 'upload_dir'); 

Następnie po kodzie przesyłania, należy:

remove_filter('upload_dir', 'upload_dir'); 

ten sposób, filtr działa tylko na Twoje przesyłanie wtyczki, a nie w innych miejscach.

+0

W ten sposób zapisuje pliki ponownie w domyślnym folderze przesyłania, a nie w folderze wtyczek ... –

+0

Czy możesz opublikować fragment kodu? Normalnie powinno działać: add_filter, wp_handle_upload, remove_filter. –

+0

co masz na myśli przez wp_handle_upload? –

2

Może zajść konieczność samodzielnego przetworzenia pliku za pomocą zwykłego PHP. Podczas przetwarzania formularza, spróbuj tego:

$uploaddir = '/path/to/plugin/uploads/'; 
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) 
    echo 'success!'; 
else 
    echo 'fail!'; 

i używać print_r($_FILES); do debugowania.

Bądź jednak bardzo, bardzo ostrożny - potencjalnie stwarzasz zagrożenie dla bezpieczeństwa. patrz Secure PHP File Upload Script, aby uzyskać więcej informacji na ten temat.

2

Może to mieć związek z ustawieniami .htaccess. Plik .htaccess tworzy ograniczenia co do tego, co możesz zrobić. Lub może to być jakieś inne ustawienie poza twoim plikiem. Czy próbowałeś go uruchomić na więcej niż 1 serwerze, aby go przetestować?

2

Oto działa solution.

add_filter('upload_dir', 'my_upload_dir'); 
$upload = wp_upload_dir(); 
remove_filter('upload_dir', 'my_upload_dir'); 

funcion my_upload_dir($upload) { 
    $upload['subdir'] = '/sub-dir-to-use' . $upload['subdir']; 
    $upload['path']  = $upload['basedir'] . $upload['subdir']; 
    $upload['url']  = $upload['baseurl'] . $upload['subdir']; 
    return $upload; 
} 
Powiązane problemy