Mit WP-CLI automatisieren
Prüf Icons in der CI mit echten Exit-Codes, bring Pakete von einer Seite auf viele und kontrollier Deploys in der Shell mit den wp easy-svg Befehlen.
Easy SVG Pro bringt sieben WP-CLI-Befehle mit. Zusammen kannst du damit Icons prüfen, bevor sie live gehen, Icon-Sets von einer Seite auf viele kopieren und nach einem Deploy bestätigen, dass jede Sammlung da ist. Dieses Tutorial zeigt dir, wie du eine Seite dafür einrichtest, auf welche Exit-Codes du dich verlassen kannst, und drei Pipelines zum Kopieren.
Die Befehle im Überblick
| Befehl | Was er macht | Schreibt er etwas? |
|---|---|---|
wp easy-svg icons list | Jede Sammlung mit Anzahl, Herkunft und Problemzahl | Nein |
wp easy-svg icons problems | Jede Datei, die ein Quellordner nicht verwenden konnte, und warum | Nein |
wp easy-svg icons validate | Probelauf eines Ordners gegen den Sanitizer der Seite | Nein |
wp easy-svg icons import | Kopiert einen Ordner in ein Drop-in unter wp-content/easy-svg-icons | Dateien |
wp easy-svg pack list | Jede exportierbare Sammlung, auch als JSON | Nein |
wp easy-svg pack export | Eine Sammlung als Paket-ZIP | Eine ZIP-Datei |
wp easy-svg pack import | Ein Paket-ZIP als neues Icon-Set | Datenbank |
Die Seite vorbereiten
Jeder Befehl prüft zuerst zwei Dinge: Die Lizenz ist aktiv, und die Funktion WP-CLI ist unter Icons → Funktionen eingeschaltet. Fehlt eins davon, bekommst du Turn on WP-CLI under Icons → Features (a license is required). und Exit-Code 1. Einen WordPress-Benutzer brauchen die Befehle nicht, sie laufen ohne Anmeldung.
Beide Plugins aktivieren
Easy SVG Support bringt den Sanitizer mit. Ohne ihn verweigern validate und beide Importe den Dienst.
wp plugin activate easy-svg easy-svg-pro
Die Lizenz einmal binden
Trag den Schlüssel in die wp-config.php ein, am besten aus einer Umgebungsvariable:
define( 'EASY_SVG_PRO_LICENSE_KEY', getenv( 'EASY_SVG_PRO_LICENSE_KEY' ) );
Die Seite aktiviert sich aus dieser Konstante auf admin_init, also wenn eine Administratorin (auf Multisite ein Netzwerk-Admin) zum ersten Mal wp-admin öffnet. WP-CLI löst admin_init nicht aus. Eine Seite, die nur WP-CLI sieht, bindet sich also nie. Öffne nach dem Setzen der Konstante einmal wp-admin, oder trag den Schlüssel unter Icons → Lizenz ein. Danach hält die Seite einen Site-Token, und der Schlüssel wird nicht mehr gebraucht.
Die Funktion WP-CLI einschalten
Schalte sie unter Icons → Funktionen ein oder in der Shell. Ergänze dabei die gespeicherten Flags, statt sie zu überschreiben, sonst geht jede andere Funktion aus:
wp eval '
$flags = (array) get_option( "easy_svg_pro_features", array() );
$flags["cli"] = true;
update_option( "easy_svg_pro_features", $flags );
'
Was deine Sammlungen brauchen, schaltest du genauso ein: sources für Theme- und Drop-in-Ordner, editor für Icon-Sets.
Prüfen
wp easy-svg icons list
Kommt eine Tabelle, ist die Seite bereit.
@staging in der wp-cli.yml.wp-config.php aus der Versionskontrolle heraus.Exit-Codes, auf die du dich verlassen kannst
| Befehl | Exit 0 | Exit 1 |
|---|---|---|
| alle | Lizenz inaktiv oder Funktion WP-CLI aus | |
icons validate | Gelaufen, egal mit welchem Ergebnis | Mit --strict: mindestens eine Datei übersprungen. Außerdem: Sanitizer fehlt oder ist zu alt |
icons problems | Sauber und mit Problemen | |
icons import | Kopiert, auch mit übersprungenen oder null Dateien | Ungültiges --collection, Ordner nicht anlegbar, Sanitizer fehlt |
pack export | ZIP geschrieben | Unbekannter Slug, kein ZipArchive, Schreiben gescheitert |
pack import | Set gespeichert, auch mit abgelehnten Icons oder Slug-Kollision | Datei nicht lesbar, nichts akzeptiert, kein freier Slug |
Drei Lücken solltest du kennen:
validate --strictgeht bei einem Ordner durch, den es nicht gibt oder der keine.svg-Dateien hat. Zähl die Dateien vorher selbst.icons problemsscheitert nie. Such nach der ZeileSuccess:.pack importweicht bei einer Kollision aufslug-2aus und endet trotzdem mit0. Such in der Ausgabe nachwas taken.
Pipeline 1: Icons bei jedem Pull Request prüfen
Die Prüfung muss gegen ein echtes WordPress mit den Sanitizer-Einstellungen der Seite laufen. Der Job kopiert die Icons also auf Staging und prüft sie dort.
name: Icons
on:
pull_request:
paths:
- "theme/assets/icons/**"
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: SSH-Schlüssel einrichten
run: |
mkdir -p ~/.ssh
echo "${{ secrets.STAGING_SSH_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan staging.example.com >> ~/.ssh/known_hosts
- name: Icons auf Staging kopieren
run: |
rsync -a --delete theme/assets/icons/ deploy@staging.example.com:/tmp/icons-pr-${{ github.event.number }}/
- name: Prüfen
run: |
ssh deploy@staging.example.com bash -s <<'SH'
set -euo pipefail
DIR=/tmp/icons-pr-${{ github.event.number }}
n=$(find "$DIR" -maxdepth 1 -name '*.svg' | wc -l)
if [ "$n" -eq 0 ]; then echo "Keine SVG-Dateien zum Prüfen"; exit 1; fi
wp --path=/var/www/staging easy-svg icons validate "$DIR" --strict
SH
Der Job scheitert mit der Tabelle im Log, sobald ein Icon übersprungen würde, und nennt den Grund: not-svg, no-drawing, duplicate, bad-name oder unreadable.
Pipeline 2: ein Icon-Set, viele Kundenseiten
Bau das Set einmal auf Staging, exportiere es und importiere es überall.
#!/usr/bin/env bash
set -euo pipefail
SLUG="agency-ui"
PACK="/tmp/$SLUG.zip"
wp @staging easy-svg pack export "$SLUG" --file="$PACK"
scp staging:"$PACK" "$PACK"
for site in client-a client-b client-c; do
scp "$PACK" "$site":/tmp/
out="$(wp @"$site" easy-svg pack import "/tmp/$SLUG.zip" --as="$SLUG" 2>&1)" || {
echo "[$site] Import fehlgeschlagen: $out" >&2
continue
}
if grep -q 'was taken' <<<"$out"; then
echo "[$site] $SLUG gibt es schon, eine Kopie liegt unter einem anderen Slug. Bitte entfernen." >&2
fi
echo "[$site] $out"
done
Gut zu wissen:
pack importlegt immer ein neues Set an. Zweimal ausgeführt hast duagency-uiundagency-ui-2. Um ein Set zu aktualisieren, änderst du es im Set-Editor oder entfernst vorher das alte.- Der Import löst
easy_svg_pro_set_icons_writtenaus, also legt der Icon-Verlauf eine Revision an und deine eigenen Listener laufen. Siehe Auf Set-Änderungen reagieren. - Schlagwörter aus dem Manifest überleben den Weg in ein Icon-Set nicht.
Pipeline 3: einen Deploy prüfen
Nach einem Theme- oder Drop-in-Deploy bestätigst du, dass die Sammlungen da und vollständig sind:
#!/usr/bin/env bash
set -euo pipefail
expected=("theme" "acme")
list="$(wp easy-svg pack list --format=json)"
for slug in "${expected[@]}"; do
jq -e --arg s "$slug" 'any(.[]; .slug == $s and .icons > 0)' <<<"$list" >/dev/null \
|| { echo "Sammlung $slug fehlt oder ist leer" >&2; exit 1; }
done
problems="$(wp easy-svg icons problems)"
grep -q '^Success:' <<<"$problems" || { echo "$problems"; exit 1; }
Stolperfallen
- Funktionen verstecken Sammlungen. Icon-Sets gibt es als Sammlungen nur, solange der Icon-Set-Editor an ist, Ordner nur mit Theme- und Ordner-Quellen. Fehlt nach einem Deploy eine Sammlung, ist oft eine Funktion aus.
icons importlegt den Zielordner zuerst an. Ein Tippfehler im Quellpfad hinterlässt einen leeren Ordner und endet mit0.- Pfade liegen auf dem Server. Mit einem Alias wie
@staginglesen und schreibenvalidate,importundexportPfade auf dem Staging-Server, nicht auf deinem Rechner. - Deaktivieren hält nicht, solange die Konstante gesetzt ist. Gibst du den Platz unter Icons → Lizenz frei, bindet der nächste Besuch in wp-admin ihn wieder aus
EASY_SVG_PRO_LICENSE_KEY. Entferne zuerst die Konstante.