Tworzysz stronę internetową i potrzebujesz pomocy?

Odezwała się dziś do mnie klientka, że chciała do kursu dodać plik tekstowy (rozszerzenie .txt) i nie może, bo WordPress jej nie pozwala. No nie pozwala, bo WordPress ma określoną listę plików, jakie można do niego wgrać za pomocą biblioteki mediów, i choć dozwolonych formatów plików jest całkiem sporo, to nie ma wśród nich tak podstawowych, jak archiwum ZIP (.zip), archiwum 7-Zip (.7z) czy właśnie zwykłych plików tekstowych (.txt). Na szczęście jak to w WordPressie często bywa – dla chcącego nie ma nic trudnego. Trzeba tylko wiedzieć co i jak…

Niestandardowe typy plików w bibliotece mediów w WordPressie

Jeśli za pomocą biblioteki mediów w WordPressie spróbujemy wgrać plik w formacie, który nie występuje na dozwolonej liście, to otrzymamy np. taki błąd:

Najprostszy sposób, by to obejść, to opisywany m.in. w naszym eBooku „Plik wp-config.php w WordPressie dla początkujących i zaawansowanych”, czyli dodanie odpowiedniej linijki do pliku wp-config.php:

define('ALLOW_UNFILTERED_UPLOADS', true);

Od tego momentu wszystkie pliki będą zapisywane, bo WordPress nie będzie ich filtrował:

Jest to opcja nie tylko szybka do wdrożenia, ale i skuteczna. Jednak jej wadą jest to, że w ten sposób tracimy całkowitą kontrolę nad tym, jakie pliki mogą być dodawane do biblioteki mediów, co może być niebezpieczne. I nawet jeśli muszą zaistnieć dodatkowe czynniki, by wynikło z tego realne zagrożenie dla kogokolwiek, to jest to opcja, której raczej nie korzystam. Chyba że w środowisku testowym…

I w tym momencie z pomocą przychodzi filtr „upload_mimes”, dzięki któremu możemy nie tylko dodać wybrane przez nas typy plików do listy dozwolonych, ale też usunąć z niej jakieś, jeśli zajdzie taka potrzeba.

By np. dodać wsparcie dla wspominanych plików tekstowych (.txt) i archiwów w formacie 7-Zip (.7z) wystarczy np. do pliku functions.php w motywie potomnym dodać taki kod:

function webinsider_wp_upload_mimes_types( $mimes ){
    $mimes['txt'] = 'text/plain';
    $mimes['7z'] = 'application/x-7z-compressed';
    return $mimes;
}
add_filter( 'upload_mimes', 'webinsider_wp_upload_mimes_types', 1, 1 );

I teraz plik archiwum 7-Zip (.7z) zostanie zapisany, ale już plik wykonywalny (.exe) nie, bo tego formatu nie dodaliśmy do listy dozwolonych:

Jeśli zamiast dodawać, chcielibyśmy np. usunąć obsługę plików Adobe PDF (.pdf), można skorzystać z takiego kodu:

function webinsider_wp_upload_mimes_types( $mimes ){
    unset($mimes['pdf']);
    return $mimes;
}
add_filter( 'upload_mimes', 'webinsider_wp_upload_mimes_types', 1, 1 );

Można oczywiście też połączyć dodawanie i usuwanie w ramach jednej funkcji:

function webinsider_wp_upload_mimes_types( $mimes ){
    $mimes['txt'] = 'text/plain';
    $mimes['7z'] = 'application/x-7z-compressed';
    unset($mimes['pdf']);
    return $mimes;
}
add_filter( 'upload_mimes', 'webinsider_wp_upload_mimes_types', 1, 1 );

Oczywiście typu plików do dodania i usunięcia są przykładowe i można je zastąpić innymi. W przypadku dodawania nowych formatów plików, może przydać się określenie typu/formatu MIME dla pliku, co można zrobić np. na tej stronie.

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Kurs "WordPress: Pierwsze kroki" (bezpłatna lekcja)
Patryk
Tworzysz stronę internetową i potrzebujesz pomocy?