Con el avance de los navegadores de Internet, me siento cada vez más cómodo utilizando SVGS al codificar sitios web ... especialmente para iconos, y gráficos simples que pueden ser reemplazados al instante por pngs.
Parece que WordPress casi soporta 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 de SVG en la galería de medios. (ver imagen abajo)
-
A veces, cuando lo agrega al editor (mediante el botón de 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.
-
Al hacer 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 bien con el elemento 1 en esta lista, pero ¿alguien ha descubierto cómo un elemento fijo 2 3 y 4?
Actualización sobre el artículo 1:
Para permitir un nuevo tipo de mime (como SVG) puedes 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ías poder subir SVGs. Puede encontrar más información en este tutorial . Esto solo resuelve el elemento 1, que, como mencioné anteriormente, no es un problema para mí (aunque creo que debería estar permitido de forma predeterminada).
Actualización sobre el elemento 2:
Hice algunas excavaciones y localicé la función que decide si un 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 ...
No estoy seguro de por qué la última sentencia 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)
Esto comprueba si 'image /' es equivalente a los primeros seis caracteres del tipo mime, que para svg es image / svg + xml (los primeros seis son "image /").
ACTUALIZAR
Tras una investigación adicional, parece que el problema no es en absoluto con wp_attachment_is_image, 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í.