Dengan kemajuan browser internet, saya menemukan diri saya semakin nyaman menggunakan SVGS ketika meng-coding situs web ... terutama untuk ikon, dan grafik sederhana yang dapat diganti dengan cepat menggunakan pngs.
Sepertinya wordpress hampir mendukung SVGS. Saya katakan hampir karena:
Ini bukan jenis file yang diizinkan secara default di wordpress. Jadi, Anda perlu menambahkan itu sebelum mengunggah SVG
Anda tidak dapat melihat thumbnail SVG di galeri Media. (lihat gambar di bawah)
Terkadang ketika Anda menambahkannya ke editor (melalui tombol add media) editor tidak tahu ukuran svg, jadi meskipun ia menambahkan svg sebagai gambar, ia memiliki lebar dan tinggi nol.
Ketika Anda mengklik "edit gambar" dari dalam popup unggahan media, Anda mendapat pesan yang mengatakan "gambar tidak ada". Lihat gambar di bawah.
Saya setuju dengan item 1 dalam daftar ini, tetapi adakah yang tahu bagaimana cara memperbaiki item 2 3, dan 4?
Perbarui tentang item 1:
Untuk mengizinkan tipe mime baru (seperti SVG), Anda bisa menambahkan hook di functions.php
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
Sekarang Anda harus dapat mengunggah SVG. Anda dapat menemukan informasi lebih lanjut dalam tutorial ini . Ini hanya memecahkan item 1, yang seperti yang saya sebutkan sebelumnya, itu bukan masalah bagi saya (meskipun saya pikir itu harus diizinkan secara default).
Perbarui tentang item 2:
Saya melakukan penggalian dan melacak fungsi yang memutuskan apakah lampiran adalah gambar atau tidak. Tampaknya semuanya berujung pada fungsi ini di wp-include / 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;
}
Seperti yang Anda lihat ada array ekstensi gambar yang valid didefinisikan dalam fungsi ini. Saya tidak melihat filter apa pun yang dapat digunakan untuk mengubah array itu. Tapi itu awal ...
Saya tidak yakin mengapa pernyataan if terakhir mengembalikan false untuk svgs. Bahkan jika saya tidak menambahkan ekstensi svg ke array $ image_exts, kondisi pertama harus mengembalikan true, bukan?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
Itu memeriksa apakah 'gambar /' sama dengan enam karakter pertama dalam tipe mime, yang untuk svg adalah gambar / svg + xml (enam pertama adalah "gambar /").
MEMPERBARUI
Setelah diselidiki lebih lanjut, tampaknya masalahnya bukan pada wp_attachment_is_image sama sekali, tetapi karena ukuran gambar (lebar dan tinggi) tidak ditambahkan ke metadata lampiran ketika SVG diunggah. Itu karena fungsi untuk menghitung gambar yang digunakan adalah fungsi php getimagesize (), yang tidak mengembalikan ukuran gambar untuk SVG. Saya menemukan jawaban pada stackoverflow tentang fungsi getimagesize dan tentang bagaimana svgs berperilaku. Lihat di sini.