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.
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01