Upload médií bez diakritiky na WordPressu
WordPress ponechává diakritiku v názvech při nahrávání souborů. Jak tyto nežádoucí znaky a další odstranit si ukážeme v dnešním návodu.
WordPress po uploadu souboru zanechá v názvu různé znaky, včetně těch českých. Na některých serverech poté nastane problém, po navštívení odkazu server vrátí Error404.
Řešení ale není tak jednoduché, jak by se mohlo zdát. Ukážeme si jedno řešení pomocí WordPress funkcí, druhé pomocí vlastních metod, které lze více přizpůsobit vlastním potřebám.
Odstranění pomocí funkcí WordPressu
WordPress obsahuje metodu remove_accents, která mnohé znaky dokáže odstranit. Přesto znaky řečtiny nebo ruštiny převede špatně, a odkazy poté fungovat nemusí. Pokud ale neočekáváte azbuku a jiné, může vám jednodušší řešení dostačovat.
Registrujeme filtr a funkci k němu, která se zavolá vždy po nahrání souboru.
1 2 3 4 5 6 7 8 9 |
function removeNonAsciiCharsFromFileUpload( $filename ) { $info = pathinfo( $filename ); $ext = empty( $info['extension'] ) ? '' : '.' . $info['extension']; $name = basename( $filename, $ext ); return remove_accents($name).$ext; } add_filter( 'sanitize_file_name', 'removeNonAsciiCharsFromFileUpload', 10 ); |
Vlastní řešení
Pokud očekáváte i další znaky, nebo jen máte rádi kontrolu nad názvy a chcete se ujistit, že žádný znak nebude dělat problémy, můžete využít následujícího kódu. Chová se stejně jako předchozí, můžete ale si nadefinovat vlastní znaky pro nahrazení. Můžete tedy přidat i řeckou abecedu, azbuku a co si jen zamanete.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
function removeNonAsciiCharsFromFileUpload( $filename ) { $info = pathinfo( $filename ); $ext = empty( $info['extension'] ) ? '' : '.' . $info['extension']; $name = basename( $filename, $ext ); // převedeme vše na malé písmena $name = mb_strtolower($name,'UTF-8'); // nahradime české a slovenské znaky (lze si přidat i vlastní) $name = str_replace( array('á','ä','č','ď','ě','é','í','ĺ','ľ','ň','ó','ô','ř','ŕ','š','ť','ú','ů','ý','ž','_',' '), array('a','a','c','d','e','e','i','l','l','n','o','o','r','r','s','t','u','u','y','z','-','-'), $name); // jiné než povolené znaky se vymažou $name = preg_replace('/[^a-z0-9\-]/', "", $name); // jsou-li 2 a více pomlček za sebou, nahradíme za jednu $name = preg_replace('/(\-){2,}/', "-", $name); // Pokud i nadále je název prázdný, můžete vložit MD5 hash názvu souboru if(strlen($name) == 0 || $name == "-"){ $name = md5($filename); } return $name . $ext; } add_filter( 'sanitize_file_name', 'removeNonAsciiCharsFromFileUpload', 10 ); |
Napsat komentář