Com o avanço dos navegadores da Internet, me sinto cada vez mais confortável usando o SVGS ao codificar sites ... especialmente para ícones e gráficos simples que podem ser substituídos rapidamente por pngs.
Parece que o wordpress quase suporta SVGS. Eu digo quase porque:
Por padrão, não é um tipo de arquivo permitido no wordpress. Então você precisa adicionar isso antes de fazer upload de SVGs
Você não pode ver uma miniatura SVG na galeria Mídia. (veja a imagem abaixo)
Às vezes, quando você o adiciona ao editor (por meio do botão adicionar mídia), o editor não sabe o tamanho do svg, portanto, embora ele adicione o svg como imagem, possui largura e altura zero.
Quando você clica em "editar imagem" a partir do pop-up de upload de mídia, você recebe uma mensagem dizendo "a imagem não existe". Veja a imagem abaixo.
Estou bem com o item 1 desta lista, mas alguém descobriu como um item de correção 2 3 e 4?
Atualização sobre o item 1:
Para permitir um novo tipo MIME (como SVG), você pode simplesmente adicionar um gancho em functions.php
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
Agora você deve poder fazer upload de SVGs. Você pode encontrar mais informações neste tutorial . Isso resolve o item 1, que, como mencionei anteriormente, não é um problema para mim (embora eu ache que deve ser permitido por padrão).
Atualização sobre o item 2:
Eu pesquisei e localizei a função que decide se um anexo é uma imagem ou não. Parece que tudo se resume a essa função no 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 você pode ver, há uma variedade de extensões de imagem válidas definidas nesta função. Não vejo nenhum filtro que possa ser usado para modificar essa matriz. Mas isso é um começo ...
Não sei por que a última declaração if retorna false para svgs. Mesmo se eu não adicionar a extensão svg ao array $ image_exts, a primeira condição deve retornar verdadeira, não deveria?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
Isso verifica se 'image /' está enquadrado nos seis primeiros caracteres do tipo mime, que para svg é image / svg + xml (os seis primeiros são "image /").
ATUALIZAR
Após uma investigação mais aprofundada, parece que o problema não está relacionado com wp_attachment_is_image, mas porque o tamanho da imagem (largura e altura) não está sendo adicionado aos metadados do anexo quando o SVG é carregado. Isso ocorre porque a função para calcular a imagem usada é a função php getimagesize (), que não retorna um tamanho de imagem para SVG. Encontrei uma resposta no stackoverflow sobre a função getimagesize e sobre como os svgs se comportam. Veja aqui.