Cum să încarci fișiere SVG în WordPress 4.9.8?
Am încercat să încarc după instalarea diferitelor plugin-uri. Am adăugat și un filtru în fișierul functions.php.
function add_svg_to_upload_mimes( $upload_mimes ) {
$upload_mimes['svg'] = 'image/svg+xml';
$upload_mimes['svgz'] = 'image/svg+xml';
return $upload_mimes;
}
add_filter( 'upload_mimes', 'add_svg_to_upload_mimes', 10, 1 );
Dar încă încărcarea unui SVG dă următoarea eroare.
@rana-umer codul tău este corect, doar elimină "+xml" după 'image/svg'.
//adaugă SVG la fișierele permise pentru încărcare
function add_file_types_to_uploads($file_types){
$new_filetypes = array();
$new_filetypes['svg'] = 'image/svg';
$file_types = array_merge($file_types, $new_filetypes );
return $file_types;
}
add_action('upload_mimes', 'add_file_types_to_uploads');

Această întrebare m-a făcut să mă scarpin în cap. Da, cum de WordPress nu acceptă acest lucru în mod implicit? Și apoi am aflat.
Ai întrebat cum să încarci SVG în WordPress 4.9.8 (versiunea actuală la momentul scrierii). Menționezi că ai "încercat să încarci după instalarea unor plugin-uri diferite". Nu spui care plugin-uri, nici dacă acestea au legătură cu SVG.
După cum înțeleg situația, cel mai sigur și potrivit răspuns în acest moment este să folosești SVG Safe (un plugin scris special pentru acest scop) de Darrell Doyle. Dacă acest plugin nu funcționează pentru tine, atunci probabil ai un conflict în altă parte și ar trebui să urmezi procedurile obișnuite pentru rezolvarea acestuia. Personal, dacă acest plugin nu ar funcționa pentru mine, aș renunța la ideea de a încărca SVG-uri.
Dacă nu ai făcut-o deja, îți sugerez să citești "SVG Uploads in WordPress - adevărul incomod" de Bjorn Johansen și/sau "Cum să activezi în siguranță suportul pentru SVG în WordPress - în doar 2 clicuri simple" de Brian Jackson. Măcar ar trebui să știi în ce te bagi.

Am încărcat fișierul SVG cu plugin-ul sugerat. A funcționat perfect, așa cum mă așteptam. Și miniatura este vizibilă. Mulțumesc mult pentru sugestie. @Tedinoz

De fapt, există mai multe detalii decât doar acest răspuns - SVG-ul trebuie să fie formatat corect, altfel pur și simplu nu se va încărca, indiferent de ce cod sau plugin folosești: https://kinsta.com/blog/wordpress-svg/#attachment_10218
Abia acum am observat că Darrell Doyle a scris codul de sanitizare pentru SVG-uri, așa că presupun că este integrat în plugin-ul său. Dar pentru cei care doresc să facă acest lucru fără un plugin, este important să înțeleagă procesul de sanitizare și cerințele acestuia.

//adaugă SVG la fișierele permise pentru încărcare
function add_file_types_to_uploads($file_types){
$new_filetypes = array();
$new_filetypes['svg'] = 'image/svg+xml';
$file_types = array_merge($file_types, $new_filetypes );
return $file_types;
}
add_action('upload_mimes', 'add_file_types_to_uploads');

Prima funcție verifică versiunea WordPress și adaugă suport pentru versiuni mai vechi de 4.8. A doua funcție înregistrează tipul de fișier mime (SVG), iar ultima funcție repară miniaturile în biblioteca media.
/**
* Adaugă suport pentru SVG
*
*/
add_filter( 'wp_check_filetype_and_ext', function( $data, $file, $filename, $mimes) {
global $wp_version;
if( $wp_version == '4.7' || ( (float) $wp_version < 4.7 ) ) {
return $data;
}
$filetype = wp_check_filetype( $filename, $mimes );
return [
'ext' => $filetype['ext'],
'type' => $filetype['type'],
'proper_filename' => $data['proper_filename']
];
}, 10, 4 );
function ns_mime_types( $mimes ){
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'upload_mimes', 'ns_mime_types' );
function ns_fix_svg() {
echo '<style type="text/css">.thumbnail img { width: 100% !important; height: auto !important;} </style>';
}
add_action( 'admin_head', 'ns_fix_svg' );

Adaugă aceste hook-uri, am testat pe WordPress 5.3 și funcționează:
// Permite SVG
add_filter('wp_check_filetype_and_ext', function ($data, $file, $filename, $mimes) {
if (!$data['type']) {
$wp_filetype = wp_check_filetype($filename, $mimes);
$ext = $wp_filetype['ext'];
$type = $wp_filetype['type'];
$proper_filename = $filename;
if ($type && 0 === strpos($type, 'image/') && $ext !== 'svg') {
$ext = $type = false;
}
$data['ext'] = $ext;
$data['type'] = $type;
$data['proper_filename'] = $proper_filename;
}
return $data;
}, 10, 4);
add_filter('upload_mimes', function ($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
});
add_action('admin_head', function () {
echo '<style type="text/css">
.media-icon img[src$=".svg"], img[src$=".svg"].attachment-post-thumbnail {
width: 100% !important;
height: auto !important;
}</style>';
});
