Avec l'avancement des navigateurs Internet, je me retrouve de plus en plus à l'aise à utiliser SVGS lors du codage de sites Web ... en particulier pour les icônes et les graphiques simples qui peuvent être remplacés à la volée par pngs.
Il semble que wordpress supporte presque SVGS. Je dis presque parce que:
Ce n'est pas par défaut un type de fichier autorisé dans wordpress. Vous devez donc ajouter cela avant de télécharger des SVG
Vous ne pouvez pas voir une vignette SVG dans la galerie multimédia. (voir l'image ci-dessous)
Parfois, lorsque vous l'ajoutez à l'éditeur (via le bouton Ajouter un média), l'éditeur ne connaît pas la taille SVG, donc bien qu'il ajoute le SVG en tant qu'image, sa largeur et sa hauteur sont nulles.
Lorsque vous cliquez sur "Modifier l'image" dans la fenêtre contextuelle de téléchargement des médias, vous obtenez un message disant "l'image n'existe pas". Voir l'image ci-dessous.
Je suis d'accord avec l'élément 1 de cette liste, mais quelqu'un a-t-il compris comment corriger un élément 2 3 et 4?
Mise à jour sur l'élément 1:
Pour autoriser un nouveau type MIME (tel que SVG), vous pouvez simplement ajouter un hook dans functions.php
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
Vous devriez maintenant pouvoir télécharger des SVG. Vous pouvez trouver plus d'informations dans ce tutoriel . Cela ne résout que le point 1, qui, comme je l'ai mentionné précédemment, n'est pas un problème pour moi (bien que je pense qu'il devrait être autorisé par défaut).
Mise à jour sur l'élément 2:
J'ai creusé et trouvé la fonction qui décide si une pièce jointe est une image ou non. Il semble que tout se résume à cette fonction dans 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;
}
Comme vous pouvez le voir, un tableau d'extensions d'image valides est défini dans cette fonction. Je ne vois aucun filtre qui pourrait être utilisé pour modifier ce tableau. Mais c'est un début ...
Je ne sais pas pourquoi la dernière instruction if renvoie false pour svgs. Même si je n'ajoute pas l'extension svg au tableau $ image_exts, la première condition devrait retourner true, n'est-ce pas?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
Cela vérifie si 'image /' est interrogé sur les six premiers caractères du type MIME, qui pour svg est image / svg + xml (les six premiers sont "image /").
MISE À JOUR
Après une enquête plus approfondie, il semble que le problème ne soit pas du tout avec wp_attachment_is_image, mais parce que la taille de l'image (largeur et hauteur) n'est pas ajoutée aux métadonnées de la pièce jointe lorsque le SVG est téléchargé. C'est parce que la fonction pour calculer l'image utilisée est la fonction php getimagesize (), qui ne renvoie pas de taille d'image pour SVG. J'ai trouvé une réponse sur stackoverflow sur la fonction getimagesize et sur le comportement des svgs. Voyez-le ici.