З просуванням веб-браузерів мені стає все зручніше використовувати SVGS під час кодування веб-сайтів ... особливо для піктограм та простої графіки, яку можна замінити на ходу за допомогою PNG.
Схоже, wordpress майже підтримує SVGS. Я кажу майже, тому що:
За замовчуванням це не допустимий тип файлу в wordpress. Тому вам потрібно додати це перед завантаженням SVG-файлів
Ви не можете побачити мініатюру SVG у галереї "Медіа". (див. зображення нижче)
Іноді, коли ви додаєте його до редактора (за допомогою кнопки додавання медіа), редактор не знає розміру svg, тому, хоча він додає svg як зображення, він має ширину та висоту нуля.
Коли ви натискаєте кнопку "редагувати зображення" з-за спливаючого вікна завантаження медіа, ви отримуєте повідомлення про те, що "зображення не існує". Дивіться зображення нижче.
Я добре з пунктом 1 у цьому списку, але хтось зрозумів, як виправити пункт 2 3 та 4?
Оновлення про пункт 1:
Щоб дозволити новий тип mime (наприклад, SVG), ви можете просто додати гачок у function.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;
}
Як ви бачите, у цій функції є масив дійсних розширень зображень. Я не бачу жодних фільтрів, які можна було б використовувати для зміни цього масиву. Але це початок ...
Я не впевнений, чому останній, якщо оператор повертає false для svgs. Навіть якщо я не додати розширення SVG масиву $ image_exts, то перша умова має повертати вірно, чи не так?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
Це перевіряє, чи 'image /' є рівним першим шести символам типу mime, що для svg є image / svg + xml (перші шість - «image /»).
ОНОВЛЕННЯ
При подальшому дослідженні здається, що проблема зовсім не в wp_attachment_is_image, а в тому, що розмір зображення (ширина та висота) не додаються до метаданих вкладень при завантаженні SVG. Це тому, що функцією для обчислення використовуваного зображення є функція php getimagesize (), яка не повертає розмір зображення для SVG. Я знайшов відповідь на StackOverflow про функції getimagesize і про те , як вести себе SVGs. Подивіться тут.