Con el avance de los navegadores de Internet, me siento cada vez más cómodo usando SVGS al codificar sitios web ... especialmente para iconos y gráficos simples que pueden reemplazarse sobre la marcha por pngs.
Parece que WordPress casi es compatible con SVGS. Digo casi porque:
No es por defecto un tipo de archivo permitido en WordPress. Por lo tanto, debe agregar eso antes de cargar SVG
No puede ver una miniatura SVG en la galería de medios. (ver imagen a continuación)
A veces, cuando lo agrega al editor (a través del botón Agregar medios), el editor no conoce el tamaño de svg, por lo que aunque agrega el svg como imagen, tiene un ancho y una altura de cero.
Cuando hace clic en "editar imagen" desde la ventana emergente de carga de medios, aparece un mensaje que dice "la imagen no existe". Ver imagen a continuación.
Estoy de acuerdo con el elemento 1 de esta lista, pero ¿alguien ha descubierto cómo corregir los elementos 2 3 y 4?
Actualización sobre el elemento 1:
Para permitir un nuevo tipo MIME (como SVG), simplemente puede agregar un gancho en functions.php
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
Ahora debería poder cargar SVG. Puede encontrar más información en este tutorial . Esto solo resuelve el elemento 1, que como mencioné antes, no es un problema para mí (aunque creo que debería estar permitido por defecto).
Actualización sobre el elemento 2:
Investigué un poco y rastreé la función que decide si un archivo adjunto es una imagen o no. Parece que todo se reduce a esta función en wp-includes / post.php
/**
* Check if the attachment is an image.
*
* @since 2.1.0
*
* @param int $post_id Attachment ID
* @return bool
*/
function wp_attachment_is_image( $post_id = 0 ) {
$post_id = (int) $post_id;
if ( !$post = get_post( $post_id ) )
return false;
if ( !$file = get_attached_file( $post->ID ) )
return false;
$ext = preg_match('/\.([^.]+)$/', $file, $matches) ? strtolower($matches[1]) : false;
$image_exts = array( 'jpg', 'jpeg', 'jpe', 'gif', 'png' );
if ( 'image/' == substr($post->post_mime_type, 0, 6) || $ext && 'import' == $post->post_mime_type && in_array($ext, $image_exts) )
return true;
return false;
}
Como puede ver, hay una serie de extensiones de imagen válidas definidas en esta función. No veo ningún filtro que pueda usarse para modificar esa matriz. Pero eso es un comienzo ...
Sin embargo, no estoy seguro de por qué la última declaración if devuelve false para svgs. Incluso si no agrego la extensión svg a la matriz $ image_exts, la primera condición debería ser verdadera, ¿no?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
Eso comprueba si 'image /' es igual a los primeros seis caracteres en el tipo mime, que para svg es image / svg + xml (los primeros seis son "image /").
ACTUALIZAR
Tras una investigación más profunda, parece que el problema no es con wp_attachment_is_image en absoluto, sino porque el tamaño de la imagen (ancho y alto) no se agrega a los metadatos del archivo adjunto cuando se carga el SVG. Esto se debe a que la función para calcular la imagen utilizada es la función php getimagesize (), que no devuelve un tamaño de imagen para SVG. Encontré una respuesta en stackoverflow sobre la función getimagesize y sobre cómo se comportan los svgs. Véalo aquí.