İnternet tarayıcılarının ilerlemesiyle, web sitelerini kodlarken SVGS'yi kullanarak kendimi gittikçe daha rahat buluyorum ... özellikle simgeler ve anında png ile değiştirilebilen basit grafikler için.
Wordpress neredeyse SVGS'yi destekliyor gibi görünüyor. Neredeyse söylüyorum çünkü:
Wordpress'te varsayılan olarak izin verilen bir dosya türü değildir. Bu nedenle, SVG'leri yüklemeden önce bunu eklemeniz gerekir
Medya galerisinde bir SVG küçük resmi göremezsiniz. (aşağıdaki resme bakın)
Bazen editöre eklediğinizde (medya ekle düğmesi aracılığıyla) düzenleyici svg boyutunu bilmez, bu nedenle svg'yi bir görüntü olarak eklese de genişliği ve yüksekliği sıfır olur.
Medya yükleme açılır penceresinden "resmi düzenle" yi tıkladığınızda "görüntü mevcut değil" şeklinde bir mesaj alırsınız. Aşağıdaki resme bakın.
Bu listedeki madde 1 ile iyiyim, ama kimse nasıl bir düzeltme öğesi 2 3 ve 4 anladı?
1. madde hakkında güncelleme:
Yeni bir mime türüne (SVG gibi) izin vermek için function.php dosyasına bir kanca ekleyebilirsiniz.
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
Şimdi SVG'leri yükleyebilmeniz gerekir. Bu eğiticide daha fazla bilgi bulabilirsiniz . Bu sadece daha önce de belirttiğim gibi, benim için bir sorun değil madde 1'i çözer (her ne kadar varsayılan olarak izin verilmesi gerektiğini düşünüyorum).
2. madde hakkında güncelleme:
Biraz kazma yaptım ve bir ekin görüntü olup olmadığına karar veren işlevi izledim. Her şey wp-include / post.php içinde bu işleve geliyor gibi görünüyor
/**
* 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;
}
Gördüğünüz gibi, bu işlevde tanımlı bir dizi geçerli resim uzantısı var. Bu diziyi değiştirmek için kullanılabilecek herhangi bir filtre göremiyorum. Ama bu bir başlangıç ...
Neden son if deyimi svgs için yanlış döndürür emin değilim. Svg uzantısını $ image_exts dizisine eklemesem bile, ilk koşul true değerini döndürmeli, değil mi?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
Bu, svg için image / svg + xml (ilk altı "image /") olan "image /" öğesinin mime türündeki ilk altı karakterle eşdeğer olup olmadığını kontrol eder.
GÜNCELLEME
Daha fazla araştırma yapıldığında, sorunun hiç wp_attachment_is_image ile ilgili olmadığı, ancak SVG yüklendiğinde görüntü boyutunun (genişlik ve yükseklik) ek meta verilerine eklenmediği anlaşılıyor. Bunun nedeni, kullanılan görüntüyü hesaplama işlevinin, SVG için bir görüntü boyutu döndürmeyen php işlevi getimagesize () olmasıdır. Stackimagesflow ve getimagesize işlevi ve svgs nasıl davrandığı hakkında bir cevap buldum. Bakın burada.