Der folgende Artikel ist ein Gastbeitrag von Ian Marquette. Ian hat herausgefunden, dass SVG ein <text>-Element haben kann, was bedeutet, dass Text aus einer dynamischen Quelle stammen kann und trotzdem SVG-spezifische Anpassungen möglich sind.
Ich habe kürzlich an einer WordPress-basierten Website gearbeitet, die eine Infografik benötigte. Als Verfechter von Responsive Design habe ich die Infografik in Illustrator gezeichnet und sie zur Skalierbarkeit als SVG exportiert. Als ich im Backend herumspielte, entdeckte ich, dass man WordPress Custom Fields zu SVG-Textelementen hinzufügen kann, um textbasierte Inhalte direkt über das WordPress CMS zu steuern. Wie fantastisch ist das?
Hier erkläre ich, wie ich es gemacht habe, und einige weitere Optionen, die Ihnen nützlich sein könnten.
Vorbereitung der SVG-Datei
Erstellen Sie die Grafik in Ihrer bevorzugten Vektoreditor-Software. Fügen Sie Platzhaltertext in den Bereich ein, in dem der benutzergesteuerte Text erscheinen soll. Hier habe ich eine einfache Grafik zur Demonstration erstellt.

Öffnen Sie nun Ihre SVG-Datei mit Ihrem bevorzugten Editor. Sie müssen einige Änderungen am Code vornehmen. In meinem Beispiel musste der Pfad in einen <textpath> geändert, eine ID erhalten und mit xlink verknüpft werden. Wenn ich das nicht tun würde, hätte jeder einzelne Buchstabe meines Textes seine eigenen Tags, Koordinaten usw.
<svg width="1000px" height="300px" viewBox="0 0 1000 300"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<path id="MyPath"
d="M 100 200
C 200 100 300 0 400 100
C 500 200 600 300 700 200
C 800 100 900 100 900 100" />
</defs>
<use xlink:href="#MyPath" fill="none" stroke="green" />
<text font-family="Helvetica" font-size="42.5">
<textPath xlink:href="#MyPath">
SVG Text on a path for WordPress!
</textPath>
</text>
</svg>
Hier ist eine Live-Demo von Text auf einem Pfad
Siehe den Pen JoakC von Chris Coyier (@chriscoyier) auf CodePen.
Sie können den Markup einfach direkt in ein WordPress-Template kopieren und einfügen. Sie könnten auch eine der anderen Methoden zum Einbinden von SVG auf Ihrer Seite verwenden, z. B. die Datei als Objekt verlinken. Im Wesentlichen muss es sich um Inline-SVG handeln, nicht um SVG, das als oder background-image verwendet wird.
Sie möchten den Inhalt zwischen den <text>-Tags durch den folgenden Code ersetzen und custom_field durch den Namen ersetzen, den Sie Ihrem Feld geben möchten
<?php
global $wp_query;
$postid = $wp_query->post->ID;
echo get_post_meta($postid, 'custom_field', true);
wp_reset_query();
?>
Wenn Sie das in das SVG einfügen, sieht es so aus:
<svg width="1000px" height="300px" viewBox="0 0 1000 300"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<path id="MyPath"
d="M 100 200
C 200 100 300 0 400 100
C 500 200 600 300 700 200
C 800 100 900 100 900 100" />
</defs>
<use xlink:href="#MyPath" fill="none" stroke="green" />
<text font-family="Helvetica" font-size="42.5">
<textPath xlink:href="#MyPath">
<?php
global $wp_query;
$postid = $wp_query->post->ID;
echo get_post_meta($postid, 'custom_field', true);
wp_reset_query();
?>
</textPath>
</text>
</svg>
Erstellen Sie nun ein Custom Field im WordPress CMS mit dieser Beschriftung und füllen Sie es aus.

Wenn Sie sich nun diese Seite ansehen, sollten Sie den benutzerdefinierten Text innerhalb Ihrer benutzerdefinierten SVG-Grafik sehen! Natürlich sind Custom Fields nur eine von vielen Möglichkeiten, dies zu tun, und sie sind recht erweiterbar. Sie könnten den Post-Titel auf diese Weise verwenden, Menüs oder alles andere, das dynamisch Text aus jedem CMS ausgibt.

Sobald der Text darin ist, kann er wie normaler Markup formatiert werden. Zum Beispiel:
...
<textpath class="text-path" ... >
...
.text-path {
fill: orange;
}
Oder jede andere SVG CSS-Eigenschaft. Das bedeutet, dass benutzerdefinierte Schriftarten über @font-face problemlos funktionieren. Sie haben auch Zugriff auf nützliche Funktionen wie SVG-Filter und Animationen.
Wie sieht die Browserunterstützung dafür aus?
Jeder Browser, der Inline-SVG unterstützt, sollte es anzeigen können. Für IE bedeutet dies IE 9 und höher.
SVG ist überraschend gut, IE 9 und aufwärts. -> HTML5 Please
Und IE8- zeigt immer noch den reinen Text an, ohne die SVG-Effekte, so dass er auch ohne SVG-Unterstützung zugänglich ist. Wenn Sie das gesamte SVG in ein
<span>oder eine Überschriften-Tag einpacken, könnten Sie es sogar für separate Stile ansprechen, wenn Sie ein Stylesheet für Legacy-Browser haben.Aus semantischen/Zugänglichkeitsgründen ist es ohnehin eine gute Idee, die Grafik in ein aussagekräftiges Tag zu verpacken, wenn Sie die SVG-Effekte zur Verschönerung einer Seitenüberschrift verwenden.
Ich bin mir nicht sicher, ob es ein Codepen-Ding ist oder nicht, aber ich benutze Firefox 27.0.1 unter Windows und nichts wird angezeigt, selbst wenn ich die volle Codepen-Seite aufrufe. Chrome 33 funktioniert einwandfrei, ebenso wie IE 10. Das ist alles, was ich derzeit installiert habe.
Das ist verdammt cool. Danke!
Toller Artikel. Ich verwende eine ähnliche Technik, um benutzergewählte Farben zu übernehmen und sie in SVG-Grafiken einzubinden.
Kleine Anmerkung, der Screenshot zeigt
custom_svg_textals WordPress Custom Field, ruft abercustom_fieldals Schlüssel im PHP-Aufruf auf.Abgesehen davon, toller Beitrag! Meiner Meinung nach wird SVG unterbewertet. Ich denke, wir werden in Zukunft viel mehr davon sehen. Es war anscheinend seiner Zeit voraus. Erinnern Sie sich noch an Adobe LiveMotion, bevor Adobe es wegen Flash eingestellt hat? Wir haben uns fast im Kreis gedreht...
Einiges von dem WordPress-Code in diesen Schnipseln ist ziemlich unterdurchschnittlich.
Zunächst einmal ist das Aufrufen von
global $wp_queryvöllig unnötig, um die Post-ID zu erhalten. Innerhalb der Schleife reicht die Funktionget_the_ID()aus. Oder im schlimmsten Fall deklarieren Sie einfachglobal $postund rufen$post->IDab, aber ohne das Zeug von$wp_queryoderwp_reset_query().wp_reset_query()setzt die gesamten Variablen$wp_queryund$postzurück und ist im Allgemeinen unnötig, selbst wenn Sie eine benutzerdefinierte Schleife durchführen. Zum Abrufen der Post-ID ist dies definitiv übertrieben. Ich habe vor einiger Zeit überwp_reset_query(),wp_reset_postdata()und das Überschreiben dieser Hauptvariablen gepostet, mit einigen guten Ressourcen für Leute, die damit nicht vertraut sind.tl;dr – Alles, was Sie in diesem Beispiel tun müssen, ist
get_post_meta( get_the_ID(), 'custom_field', true);, solange Sie sich in der Schleife befinden. Kein Bedarf an dem anderen Zeug, und es ist keine sehr gute Praxis.Ich stimme Ihnen voll und ganz zu.
Ist das mit den gängigen Browsern kompatibel?
Sie haben mich beim WP-Code erwischt, tut mir leid. Das passiert, wenn man es eilig hat, nehme ich an.
Wir haben diese Technik kürzlich in einer WP-Website verwendet, rufinaehijas.com, falls Sie die Browserkompatibilität überprüfen möchten.
Das Problem, auf das wir gestoßen sind, ist das Anwenden von Kerning in Firefox, da es aussieht, als gäbe es einen Fehler (kennt jemand eine Lösung, um
kerning=" "auf dem TextPath zu verwenden?).Es ist auch sehr wichtig, dass aufgrund der Oberlängenhöhe der Typografie, der Größe und der Welligkeit des Pfades die innere Kurve der Typografie im oberen Bereich hängen bleibt. Wir haben es gelöst, indem wir die vertikale Positionierung mit dem
'dy'-Attribut auf das<tspan>angewendet haben, sodass der Pfad in der Mitte der Typografie liegt.Wow, ich werde mich dem sofort widmen! Was für ein toller Fund.
Das ist super cool!
SVG erweist sich heutzutage in vielerlei Hinsicht als sehr nützlich.