ด้วยความก้าวหน้าของอินเทอร์เน็ตเบราว์เซอร์ฉันพบว่าตัวเองสบายใจมากขึ้นเมื่อใช้ SVGS ในการเข้ารหัสเว็บไซต์ ... โดยเฉพาะอย่างยิ่งสำหรับไอคอนและกราฟิกง่าย ๆ ที่สามารถเปลี่ยนได้ทันทีโดย pngs
ดูเหมือนว่า WordPress เกือบรองรับ SVGS ฉันพูดเกือบเพราะ:
ไม่ใช่ค่าเริ่มต้นประเภทไฟล์ที่อนุญาตใน wordpress ดังนั้นคุณต้องเพิ่มมันก่อนที่จะอัพโหลด SVG
คุณไม่เห็นภาพขนาดย่อของ SVG ในแกลเลอรี่สื่อ (ดูภาพด้านล่าง)
บางครั้งเมื่อคุณเพิ่มลงในตัวแก้ไข (ผ่านปุ่มเพิ่มสื่อ) ตัวแก้ไขไม่ทราบขนาด svg ดังนั้นแม้ว่าจะเพิ่ม svg เป็นรูปภาพ แต่ก็มีความกว้างและความสูงเป็นศูนย์
เมื่อคุณคลิกที่ "แก้ไขภาพ" จากภายในป๊อปอัปอัปโหลดสื่อคุณจะได้รับข้อความว่า "ไม่มีภาพ" ดูภาพด้านล่าง
ฉันใช้ได้กับรายการที่ 1 ในรายการนี้ แต่มีใครบ้างที่คิดว่ารายการแก้ไข 2 3 และ 4 เป็นอย่างไร
อัปเดตเกี่ยวกับรายการ 1:
ในการอนุญาตประเภท mime ใหม่ (เช่น SVG) คุณสามารถเพิ่ม hook ใน functions.php
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
ตอนนี้คุณน่าจะสามารถอัปโหลด SVG ได้ คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ในบทช่วยสอนนี้ นี่เป็นเพียงการแก้ไขรายการที่ 1 ซึ่งฉันได้กล่าวถึงก่อนหน้านี้ไม่ใช่ปัญหาสำหรับฉัน (แม้ว่าฉันคิดว่าควรอนุญาตโดยค่าเริ่มต้น)
อัปเดตเกี่ยวกับรายการ 2:
ฉันขุดและติดตามฟังก์ชั่นที่ตัดสินใจว่าสิ่งที่แนบมานั้นเป็นภาพหรือไม่ ดูเหมือนว่ามันจะลงมาที่ฟังก์ชั่นนี้ใน 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;
}
ในขณะที่คุณสามารถเห็นว่ามีส่วนขยายภาพที่ถูกต้องที่กำหนดไว้ในฟังก์ชั่นนี้ ฉันไม่เห็นตัวกรองใด ๆ ที่สามารถใช้ในการปรับเปลี่ยนอาร์เรย์นั้น แต่นั่นเป็นการเริ่มต้น ...
ฉันไม่แน่ใจว่าทำไมคำสั่งสุดท้ายถ้าส่งกลับค่าเท็จสำหรับ svgs แม้ว่าฉันจะไม่เพิ่มส่วนขยาย svg ไปยังอาร์เรย์ $ image_exts แต่เงื่อนไขแรกควรกลับมาจริงใช่ไหม
if ( 'image/' == substr($post->post_mime_type, 0, 6)
ที่ตรวจสอบว่า 'image /' มีผลกับอักขระหกตัวแรกในประเภท mime ซึ่งสำหรับ svg คือ image / svg + xml (หกตัวแรกคือ "image /")
UPDATE
เมื่อทำการตรวจสอบเพิ่มเติมดูเหมือนว่าปัญหาไม่ได้อยู่ที่ wp_attachment_is_image เลย แต่เนื่องจากขนาดของภาพ (ความกว้างและความสูง) ไม่ได้ถูกเพิ่มลงในข้อมูลเมตาของสิ่งที่แนบเมื่ออัพโหลด SVG นั่นเป็นเพราะฟังก์ชั่นในการคำนวณภาพที่ใช้คือฟังก์ชั่น php getimagesize () ซึ่งไม่ส่งคืนขนาดภาพสำหรับ SVG ฉันพบคำตอบใน stackoverflow เกี่ยวกับฟังก์ชั่น getimagesize และการทำงานของ svgs ดูที่นี่