Mit der Weiterentwicklung der Internetbrowser finde ich es immer komfortabler, SVGS beim Codieren von Websites zu verwenden ... insbesondere für Symbole und einfache Grafiken, die im laufenden Betrieb durch PNGs ersetzt werden können.
Es sieht so aus, als ob WordPress SVGS fast unterstützt. Ich sage fast weil:
Es ist nicht standardmäßig ein zulässiger Dateityp in WordPress. Sie müssen dies also hinzufügen, bevor Sie SVGs hochladen
In der Mediengalerie wird kein SVG-Miniaturbild angezeigt. (siehe Bild unten)
Manchmal, wenn Sie es dem Editor hinzufügen (über die Schaltfläche Medien hinzufügen), kennt der Editor die SVG-Größe nicht. Obwohl er das SVG als Bild hinzufügt, hat er eine Breite und Höhe von Null.
Wenn Sie im Popup zum Hochladen von Medien auf "Bild bearbeiten" klicken, wird die Meldung "Bild existiert nicht" angezeigt. Siehe Bild unten.
Ich bin mit Punkt 1 in dieser Liste einverstanden, aber hat jemand herausgefunden, wie ein Punkt 2 3 und 4 behoben werden?
Update zu Punkt 1:
Um einen neuen MIME-Typ (z. B. SVG) zuzulassen, können Sie einfach einen Hook in die Datei functions.php einfügen
function allow_new_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter( 'mime_types', 'allow_new_mime_type' );
Jetzt sollten Sie SVGs hochladen können. Weitere Informationen finden Sie in diesem Tutorial . Dies löst nur Punkt 1, der, wie ich bereits erwähnt habe, für mich kein Problem darstellt (obwohl ich denke, dass dies standardmäßig zulässig sein sollte).
Update zu Punkt 2:
Ich habe ein bisschen gegraben und die Funktion aufgespürt, die entscheidet, ob ein Anhang ein Bild ist oder nicht. Es scheint, dass alles auf diese Funktion in wp-includes / post.php hinausläuft
/**
* 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;
}
Wie Sie sehen, ist in dieser Funktion eine Reihe gültiger Bilderweiterungen definiert. Ich sehe keine Filter, mit denen dieses Array geändert werden könnte. Aber das ist ein Anfang ...
Ich bin mir nicht sicher, warum die letzte if-Anweisung für svgs false zurückgibt. Selbst wenn ich die Erweiterung svg nicht zum Array $ image_exts hinzufüge, sollte die erste Bedingung true zurückgeben, nicht wahr?
if ( 'image/' == substr($post->post_mime_type, 0, 6)
Dies prüft, ob 'image /' den ersten sechs Zeichen im MIME-Typ entspricht, der für svg image / svg + xml ist (die ersten sechs sind "image /").
AKTUALISIEREN
Bei weiteren Untersuchungen scheint das Problem überhaupt nicht bei wp_attachment_is_image zu liegen, sondern weil die Bildgröße (Breite und Höhe) beim Hochladen der SVG nicht zu den Anhangsmetadaten hinzugefügt wird. Dies liegt daran, dass die Funktion zur Berechnung des verwendeten Bildes die PHP-Funktion getimagesize () ist, die keine Bildgröße für SVG zurückgibt. Ich habe auf stackoverflow eine Antwort auf die Funktion getimagesize und auf das Verhalten von svgs gefunden. Sehen Sie es hier.