Con l'avanzamento dei browser Internet, mi trovo sempre più a mio agio nell'usare SVGS durante la codifica di siti Web ... specialmente per icone e grafica semplice che può essere sostituita al volo da pngs.
Sembra che wordpress supporti quasi SVGS. Dico quasi perché:
Non è di default un tipo di file consentito in wordpress. Quindi è necessario aggiungerlo prima di caricare SVG
Non è possibile visualizzare una miniatura SVG nella Galleria multimediale. (vedi immagine sotto)
A volte quando lo aggiungi all'editor (tramite il pulsante Aggiungi media) l'editor non conosce le dimensioni di svg, quindi anche se aggiunge lo svg come immagine, ha una larghezza e un'altezza pari a zero.
Quando si fa clic su "modifica immagine" all'interno del popup di caricamento dei media, viene visualizzato il messaggio "L'immagine non esiste". Vedi l'immagine sotto.
Sto bene con l'articolo 1 in questo elenco, ma qualcuno ha capito come un elemento fisso 2 3 e 4?
Aggiornamento sull'elemento 1:
Per consentire un nuovo tipo MIME (come SVG) puoi semplicemente aggiungere un hook in Functions.php
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
Ora dovresti essere in grado di caricare SVG. Puoi trovare ulteriori informazioni in questo tutorial . Questo risolve solo l'articolo 1, che come ho detto prima, non è un problema per me (anche se penso che dovrebbe essere consentito per impostazione predefinita).
Aggiornamento sull'elemento 2:
Ho fatto qualche ricerca e ho rintracciato la funzione che decide se un allegato è un'immagine o no. Sembra che tutto dipenda da questa funzione in 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;
}
Come puoi vedere c'è una serie di estensioni di immagini valide definite in questa funzione. Non vedo alcun filtro che potrebbe essere utilizzato per modificare quell'array. Ma è un inizio ...
Non sono sicuro del motivo per cui l'ultima istruzione if restituisca false per svgs. Anche se non aggiungo l'estensione svg all'array $ image_exts, la prima condizione dovrebbe restituire vero, no?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
Che controlla se 'image /' è richiesto ai primi sei caratteri nel tipo mime, che per svg è image / svg + xml (i primi sei sono "image /").
AGGIORNARE
A seguito di ulteriori accertamenti, sembra che il problema non riguardi affatto wp_attachment_is_image, ma perché le dimensioni dell'immagine (larghezza e altezza) non vengono aggiunte ai metadati dell'allegato quando viene caricato SVG. Questo perché la funzione per calcolare l'immagine utilizzata è la funzione php getimagesize (), che non restituisce una dimensione dell'immagine per SVG. Ho trovato una risposta su StackOverflow sulla funzione getimagesize e su come si comportano gli svgs. Vedi qui.