easy_svg_icon()
Gib ein Icon aus der Easy-SVG-Bibliothek als Inline-SVG in jedem Theme-Template aus, mit passenden Barrierefreiheits-Attributen und optionaler CSS-Klasse.
Funktion · Easy SVG · Status: Stabil
easy_svg_icon() liefert dir ein Icon aus der Icon-Bibliothek der Website als Inline-SVG, fertig zum echo im Template. Du übergibst den Namen des Icons und optional eine CSS-Klasse und ein Label. Ohne Label gilt das Icon als Dekoration und ist für Screenreader unsichtbar, mit Label wird es als Bild mit diesem Namen vorgelesen.
Verwendung
easy_svg_icon( string $name, array $args = array() ): string
Wann du es brauchst
- In einem klassischen oder hybriden Theme-Template (
header.php, ein Template-Part, ein Helfer in derfunctions.php), wenn neben einem Link oder einer Überschrift ein Icon stehen soll. - In der
render.phpeines Blocks oder einemrender_callback, wo du HTML in PHP baust. - In einem Page-Builder-Widget oder einer Ausgabe für eigene Felder, die PHP ausführt.
- Unter WordPress älter als 7.1: Die Funktion liest das gespeicherte Icon direkt und braucht keine Icon-Registry des Cores.
Wann nicht:
- In Beitragsinhalten, die Redakteure schreiben. Nimm dort den Shortcode
[easy_svg_icon]oder den Core-Block Icon mit der Sammlungeasy-svg. - Wenn du genau die Zeichnung brauchst, die der Icon-Block zeigt. Der Block zeichnet, was beim
initan die Icon-Registry übergeben wurde, und das kann vom gespeicherten Markup abweichen (Formen in Pfade umgebaut, Striche als Klassen).easy_svg_icon()gibt das gespeicherte Markup selbst aus.
Parameter
Das Icon, das ausgegeben werden soll. Entweder der reine Slug (heart) oder der Name mit Sammlung (easy-svg/heart), beide finden dasselbe Icon. Alles vor dem ersten Schrägstrich ist die Sammlung, alles danach der Slug. Ein Slug besteht aus Kleinbuchstaben, Ziffern, Bindestrichen und Unterstrichen und beginnt und endet mit einem Buchstaben oder einer Ziffer (das Muster in EASY_SVG_ICON_NAME_PATTERN). Es ist der Slug, den die Bibliothek und ihr Kopieren-Knopf anzeigen. War ein Name beim Hinzufügen schon vergeben, hat WordPress -2 angehängt. Schau also in der Bibliothek nach, statt ihn aus dem Label zu raten.
Optionale Einstellungen. Unbekannte Schlüssel werden ignoriert.
class(string): CSS-Klassen für dassvg-Wurzelelement, mitesc_attr()maskiert. Leer heißt: kein class-Attribut.label(string): der zugängliche Name. Ein nicht leeres Label macht das Icon bedeutungstragend:role="img",focusable="false"undaria-labelkommen dazu. Das Label wird als Attribut maskiert, Anführungszeichen, spitze Klammern,$und Backslashes kommen also unverändert und harmlos an.decorative(bool): überschreibt den Standard in beide Richtungen.trueversteckt das Icon (aria-hidden="true",focusable="false") auch mit Label und verwirft das Label.falsehält es auch ohne Label bedeutungstragend, der Name fällt dann auf den gespeicherten Titel des Icons zurück, sonst auf den Slug als Wörter (arrow-leftwird zuArrow left).
Standard: array(), also ein dekoratives Icon ohne Klasse.
Rückgabewert
Das SVG-Markup des Icons, mit Klasse und Barrierefreiheits-Attributen im svg-Wurzeltag, fertig zum Ausgeben. Ein leerer String, wenn es das Icon nicht gibt, wenn seine Sammlung nicht easy-svg ist und kein Filter easy_svg_icon_markup es liefert, oder wenn dieser Filter einen leeren String zurückgibt. Hat das Markup gar keinen svg-Wurzeltag (nur über den Filter möglich), kommt es unverändert und ohne zusätzliche Attribute zurück.
Standardwert
$args | Ergebnis am svg-Wurzelelement |
|---|---|
| keine | aria-hidden="true" focusable="false" |
label gesetzt | role="img" focusable="false" aria-label="..." |
label gesetzt, decorative true | aria-hidden="true" focusable="false", kein Label |
decorative false, kein Label | role="img" focusable="false" aria-label="Gespeicherter Titel" |
Beispiele
Ein dekoratives Icon neben Text
Der Link sagt schon, was er tut, das Icon ist also Dekoration und bleibt für Screenreader unsichtbar.
<a class="site-cart" href="<?php echo esc_url( home_url( '/cart/' ) ); ?>">
<?php echo easy_svg_icon( 'cart', array( 'class' => 'site-cart__icon' ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
<?php esc_html_e( 'Cart', 'mytheme' ); ?>
</a>
Ein Knopf nur mit Icon, mit Label
Es gibt keinen sichtbaren Text, also trägt das Icon den Namen. Übersetze das Label.
<button type="button" class="menu-toggle" aria-expanded="false">
<?php
echo easy_svg_icon( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
'easy-svg/menu',
array(
'class' => 'menu-toggle__icon',
'label' => __( 'Open menu', 'mytheme' ),
)
);
?>
</button>
Ein Theme-Helfer, der ein fehlendes Plugin übersteht
Das Theme läuft weiter, wenn Easy SVG deaktiviert oder das Icon gelöscht ist, und zeigt dann ein Textzeichen.
function mytheme_icon( $name, $args = array() ) {
if ( ! function_exists( 'easy_svg_icon' ) ) {
return '';
}
$svg = easy_svg_icon( $name, $args );
if ( '' === $svg ) {
return '<span class="mytheme-icon-missing" aria-hidden="true">•</span>';
}
return '<span class="mytheme-icon">' . $svg . '</span>';
}
// Im Template:
echo mytheme_icon( 'phone', array( 'class' => 'contact__icon' ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
Bedeutungstragend, ohne ein Label zu schreiben
Mit decorative false bekommt das Icon den Titel aus der Bibliothek als Namen. Praktisch, wenn der Titel schon ein guter Text ist.
echo easy_svg_icon( 'award', array( 'decorative' => false ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
// aria-label ist der gespeicherte Titel, zum Beispiel "Award"
Der Rückgabewert wird absichtlich ohne Escaping ausgegeben: wp_kses_post() oder esc_html() würden das SVG zerstören. Für die eigenen Icons des Plugins ist das sicher, denn das gespeicherte Markup lief beim Hinzufügen durch den SVG-Sanitizer der Website und einen zweiten Härtungsschritt (keine Skripte, keine style-Elemente, keine Animationselemente, keine Event-Handler, kein externes href). Es ist aber nur so sicher wie deine Filter auf easy_svg_icon_markup: Was ein Filter zurückgibt, wird so ausgegeben, wie es ist.
So funktioniert es
- Der Name wird am ersten Schrägstrich in Sammlung und Slug geteilt. Ohne Schrägstrich ist die Sammlung
easy-svg. easy_svg_icon_markup()sucht denesw_icon-Beitrag mit diesem Slug überget_page_by_path()(nur für die Sammlungeasy-svg) und nimmt seinenpost_content. Jede andere Sammlung startet mit einem leeren String.- Der Filter
easy_svg_icon_markupläuft über dieses Markup, mit Slug und Sammlung. - Ist das Ergebnis leer, endet es hier mit einem leeren String. Es wird kein leerer Container erfunden.
- Klasse und Barrierefreiheits-Attribute werden gebaut und in den ersten echten
svg-Tag eingesetzt (ein Tag wiesvgfoowird übersprungen). Sie werden als Text eingefügt, nicht mitpreg_replace(), damit ein Label wiePreis $20nicht verstümmelt wird.
Caching: Einen eigenen Cache gibt es nicht. get_page_by_path() merkt sich seine Antwort in der Objekt-Cache-Gruppe post-queries, bis sich irgendein Beitrag ändert. Mehrere Aufrufe für dasselbe Icon in einer Anfrage kosten also eine Datenbankabfrage. Mit persistentem Objekt-Cache überlebt das Ergebnis auch zwischen Anfragen. Der Schalter unter Icons, Einstellungen spielt hier keine Rolle: Die Funktion ist immer geladen und liest die Beiträge direkt, auch wenn die Bibliothek ausgeschaltet ist.
Stolperfallen
- Größe. Die Funktion setzt kein
widthund keinheight. Ein SVG mit nur einerviewBoxwird so breit wie sein Container. Gib der Klasse eine Größe, zum Beispielwidth: 1em; height: 1em;. - Farbe. Das Markup wird so ausgegeben, wie es gespeichert ist. Das Icon folgt der Textfarbe nur, wenn das SVG selbst
currentColornutzt (oderfillnicht setzt und dein CSSfill: currentColorsetzt). Fest eingetragene Farben in der Datei bleiben fest. - Doppelte Attribute. Klasse und ARIA-Attribute werden eingefügt, nicht zusammengeführt. Hat die gespeicherte Wurzel schon ein
class, hat sie danach zwei, und Browser behalten das erste, also deins. Schreib alle Klassen, die du brauchst, inclass. - Label
"0". Ein Label0gilt in PHP als leer, das Icon bleibt dann dekorativ, außer du übergibstdecorativefalse. - Geänderter Slug. Umbenennen in der Bibliothek behält den Slug, Templates laufen weiter. Löschen und neu Hinzufügen kann einen neuen Slug ergeben (
heart-2), und jeder Aufruf liefert dann einen leeren String. - Nicht die Zeichnung des Blocks. Was du mit
easy_svg_registrable_iconsänderst, erreicht nur den Icon-Block undwp_get_icon(), nie diese Funktion.