Cómo subir SVG en WordPress 4.9.8
Intenté subir SVG después de instalar diferentes plugins. Incluso agregué un filtro al archivo 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 );
Pero al intentar subir un SVG sigue apareciendo el siguiente error.
@rana-umer tu código es correcto, solo elimina el "+xml" después de 'image/svg'.
//agregar SVG a los tipos de archivo permitidos para subir
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');

Esta pregunta me dejó rascándome la cabeza. Sí, ¿cómo es que WordPress no soporta esto de forma nativa? Y luego lo descubrí.
Preguntaste cómo subir SVG en WordPress 4.9.8 (la versión actual al momento de escribir esto). Mencionaste que "intentaste subirlos después de instalar diferentes plugins". No mencionas cuáles plugins, ni si están relacionados con SVG.
Según entiendo la situación, la respuesta más segura y apropiada en este momento es usar SVG Safe (un plugin creado específicamente para este propósito) por Darrell Doyle. Si este plugin no funciona para ti, entonces sugiero que tienes un conflicto en otro lugar, y deberías seguir los procedimientos habituales para resolverlo. Personalmente, si este plugin no funcionara para mí, abandonaría la idea de subir SVGs.
Si aún no lo has hecho, puedo sugerirte leer "Subidas de SVG en WordPress - la incómoda verdad" por Bjorn Johansen y/o "Cómo Habilitar Soporte SVG en WordPress de Forma Segura - 2 Clics Simples" por Brian Jackson. Al menos deberías saber en lo que te estás metiendo.

Intenté subir el archivo SVG con el plugin sugerido. Funcionó bien como se esperaba. Y la miniatura también es visible. Muchas gracias por sugerir esto. @Tedinoz

En realidad hay más que solo esta respuesta - el SVG tiene que estar formateado correctamente o simplemente no se subirá, independientemente del código o plugin que uses: https://kinsta.com/blog/wordpress-svg/#attachment_10218
Recién ahora veo que Darrell Doyle escribió el sanitizador para SVGs, así que imagino que está integrado en su plugin. Pero para aquellos que quieren hacerlo sin un plugin, es importante entender el proceso de sanitización y qué se requiere.

//agregar SVG a los tipos de archivos permitidos para subir
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');

La primera función verifica la versión de WordPress y añade soporte para versiones inferiores a la 4.8. La segunda función registra el tipo de archivo MIME (SVG) y la última corrige las miniaturas en la biblioteca multimedia.
/**
* Añadir soporte para 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' );

Añade estos hooks, los he probado en WordPress 5.3 y funcionan:
// Permitir 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>';
});
