Với sự tiến bộ của trình duyệt internet, tôi thấy mình ngày càng thoải mái hơn khi sử dụng SVGS khi mã hóa trang web ... đặc biệt là các biểu tượng và đồ họa đơn giản có thể được thay thế nhanh chóng bằng pngs.
Có vẻ như wordpress gần như hỗ trợ SVGS. Tôi nói gần như bởi vì:
Theo mặc định, đây không phải là loại tệp được phép trong wordpress. Vì vậy, bạn cần thêm nó trước khi tải lên SVG
Bạn không thể thấy hình thu nhỏ của SVG trong thư viện Media. (xem hình dưới đây)
Đôi khi, khi bạn thêm nó vào trình chỉnh sửa (thông qua nút thêm phương tiện), trình soạn thảo không biết kích thước svg, vì vậy mặc dù nó thêm svg dưới dạng hình ảnh nhưng nó có chiều rộng và chiều cao bằng không.
Khi bạn nhấp vào "chỉnh sửa hình ảnh" từ trong cửa sổ bật lên phương tiện tải lên, bạn sẽ nhận được thông báo "hình ảnh không tồn tại". Xem hình ảnh dưới đây.
Tôi ổn với mục 1 trong danh sách này, nhưng có ai tìm ra cách sửa mục 2 3 và 4 không?
Cập nhật về mục 1:
Để cho phép một loại mime mới (chẳng hạn như SVG), bạn chỉ cần thêm một hook trong hàm.php
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
Bây giờ bạn sẽ có thể tải lên các SVG. Bạn có thể tìm thêm thông tin trong hướng dẫn này . Điều này chỉ giải quyết mục 1, như tôi đã đề cập trước đây, nó không phải là vấn đề đối với tôi (mặc dù tôi nghĩ rằng nó nên được cho phép theo mặc định).
Cập nhật về mục 2:
Tôi đã thực hiện một số hoạt động đào và theo dõi chức năng quyết định xem một tệp đính kèm có phải là hình ảnh hay không. Dường như tất cả đều bắt nguồn từ chức năng này trong wp-gộp / 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;
}
Như bạn có thể thấy có một loạt các phần mở rộng hình ảnh hợp lệ được xác định trong chức năng này. Tôi không thấy bất kỳ bộ lọc nào có thể được sử dụng để sửa đổi mảng đó. Nhưng đó là một khởi đầu ...
Tôi không chắc chắn tại sao câu lệnh if cuối cùng trả về false cho svss. Ngay cả khi tôi không thêm tiện ích mở rộng svg vào mảng $ image_exts, điều kiện đầu tiên sẽ trả về đúng, không nên sao?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
Điều đó kiểm tra xem 'image /' có phù hợp với sáu ký tự đầu tiên trong loại mime hay không, đối với svg là image / svg + xml (sáu đầu tiên là "image /").
CẬP NHẬT
Sau khi điều tra thêm, có vẻ như vấn đề không nằm ở wp_attachment_is_image, mà vì kích thước hình ảnh (chiều rộng và chiều cao) không được thêm vào siêu dữ liệu đính kèm khi SVG được tải lên. Đó là bởi vì hàm để tính toán hình ảnh được sử dụng là hàm php getimagesize (), không trả về kích thước hình ảnh cho SVG. Tôi đã tìm thấy một câu trả lời trên stackoverflow về hàm getimagesize và về cách các Svss hành xử. Xem nó ở đây.