Wraz z postępem przeglądarek internetowych coraz wygodniej mi się korzysta z SVGS podczas kodowania stron internetowych ... szczególnie w przypadku ikon i prostej grafiki, którą można natychmiast zastąpić pngs.
Wygląda na to, że wordpress prawie obsługuje SVGS. Mówię prawie dlatego, że:
Domyślnie nie jest to dozwolony typ pliku w wordpress. Musisz to dodać przed przesłaniem plików SVG
W galerii multimediów nie widać miniatury SVG. (patrz zdjęcie poniżej)
Czasami, gdy dodajesz go do edytora (za pomocą przycisku dodawania multimediów), edytor nie zna rozmiaru svg, więc chociaż dodaje svg jako obraz, ma szerokość i wysokość zero.
Po kliknięciu przycisku „edytuj obraz” w wyskakującym okienku przesyłania multimediów pojawia się komunikat „obraz nie istnieje”. Zobacz zdjęcie poniżej.
Nie mam nic przeciwko pozycji 1 na tej liście, ale czy ktoś odkrył, jak naprawić pozycję 2 3 i 4?
Aktualizacja o punkcie 1:
Aby zezwolić na nowy typ MIME (taki jak SVG), możesz po prostu dodać hook w functions.php
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
Teraz powinieneś mieć możliwość przesyłania plików SVG. Więcej informacji można znaleźć w tym samouczku . To rozwiązuje tylko punkt 1, który, jak wspomniałem wcześniej, nie jest dla mnie problemem (chociaż myślę, że domyślnie powinno być dozwolone).
Aktualizacja o punkcie 2:
Zrobiłem trochę kopania i wyśledziłem funkcję, która decyduje, czy załącznik jest obrazem, czy nie. Wygląda na to, że wszystko sprowadza się do tej funkcji w 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;
}
Jak widać, w tej funkcji zdefiniowano tablicę poprawnych rozszerzeń obrazu. Nie widzę żadnych filtrów, które mogłyby zostać użyte do modyfikacji tej tablicy. Ale to początek ...
Nie jestem jednak pewien, dlaczego ostatnia instrukcja if zwraca false dla svgs. Nawet jeśli nie dodam rozszerzenia svg do tablicy $ image_exts, pierwszy warunek powinien zwrócić true, prawda?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
To sprawdza, czy „image /” jest równe pierwszej szóstce w typie mime, która dla svg to image / svg + xml (pierwsze sześć to „image /”).
AKTUALIZACJA
Po dalszym badaniu wydaje się, że problem nie dotyczy w ogóle wp_attachment_is_image, ale ponieważ rozmiar obrazu (szerokość i wysokość) nie są dodawane do metadanych załącznika podczas przesyłania SVG. Jest tak, ponieważ funkcją obliczającą użyty obraz jest funkcja php getimagesize (), która nie zwraca rozmiaru obrazu dla SVG. Znalazłem odpowiedź na stackoverflow na temat funkcji getimagesize i tego, jak zachowują się svgs. Zobacz tutaj.