Ersteinrichtung von WordPress mit Hilfe der WP-CLI

Wenn du öfters einmal WordPress installierst hast, dann hast du wahrscheinlich schon einen Standard-Setup welches du immer wieder nutzt. Bei mir ist das genau so, ich setze aktuell jeden Monate mehrere neue WordPress Websites auf und habe da meine Grundausstattung gefunden.

Das beinhaltet aber nicht nur ein Theme und verschiedene Plugins zu installieren. Denn auch Grundeinstellungen von WordPress musste ich bis vor kurzem jedesmal händische anfassen.

Dabei habe ich immer mal wieder Kleinigkeiten, wie z.B. das die Mediathek keine Jahres und Ordnerstruktur aufbauen soll, vergessen.

Damit ich mir diese Arbeit erspare und solche, kleinen und immer wiederkehrende, Dinge nicht vergesse, hab ich mich mal etwas genauer mit der WP-CLI beschäftigt. Dadurch kann jetzt nicht nur ich WordPress viel schneller immer zum selben Ausgangspunkt bringen, sondern alle die mit im Team arbeiten.

Meine Beispiel Konfiguration

Damit du gleich siehst wie all meine Befehle aussehen hier alles einmal zusammen. Danach erläutere ich dir gern die einzelnen Abschnitte etwas genauer 😉

wp maintenance-mode activate

wp config set DISALLOW_FILE_EDIT true --raw
wp config set IMAGE_EDIT_OVERWRITE true --raw
wp config set EMPTY_TRASH_DAYS 30 --raw
wp config set WP_POST_REVISIONS 8 --raw
wp config set WP_EMOICONS false --raw
wp config set WP_MEMORY_LIMIT '256M'
wp config set WP_MAX_MEMORY_LIMIT '512M'
wp config set SEOPRESS_LICENSE_KEY 'XXXXXXX'

wp plugin delete hello-dolly akismet
wp theme delete twentytwentytwo twentytwentythree

wp option update timezone_string "Europe/Berlin"
wp option update time_format "G:i"
wp option update date_format "d. F Y"

wp option update large_size_w 2048
wp option update large_size_h 2048
wp option update medium_size_w 600
wp option update medium_size_h 600
wp option update thumbnail_size_w 300
wp option update thumbnail_size_h 300
wp option update uploads_use_yearmonth_folders 0

wp post update 2 --post_name='start' --post_title='Startseite' --post_status=publish --menu_order='100'
wp post update 3 --post_name='datenschutz' --post_title='Datenschutzerklärung' --menu_order='800' --post_status=publish
wp post create --post_type=page --post_name='impressum' --post_title='Impressum' --menu_order='810' --post_status=publish

wp option update page_on_front 2
wp option update show_on_front page

wp term update category 1 --name='Aktuelles' --slug='aktuelles'

wp rewrite structure '/%category%/%postname%/'
wp rewrite flush

wp plugin install disable-comments disable-embeds embed-privacy enable-media-replace fluent-security fluent-smtp fluentform generateblocks imagify preferred-languages wp-seopress simple-revisions-delete statify svg-support webp-uploads

wp plugin install https://PATH/blocksy-companion-pro.zip  
wp plugin install https://PATH/generateblocks-pro.zip
wp plugin install https://PATH/wp-rocket.zip

wp theme install blocksy

wp plugin activate disable-comments disable-embeds embed-privacy enable-media-replace fluent-security fluent-smtp generateblocks generateblocks-pro preferred-languages simple-revisions-delete svg-support webp-uploads

wp disable-comments settings --types=all --xmlrpc --rest-api --disable-avatar

wp language core install de_DE_formal de_DE
wp site switch-language de_DE_formal

wp language plugin install --all de_DE de_DE_formal
wp language theme install --all de_DE de_DE_formal
wp language core update

wp option update admin_email example@example.de
wp user create hej.admin example@example.de --role=administrator --display_name=hejADMIN --user_nicename=hejADMIN --user_url=https://hejchris.de --first_name=hej --last_name=Administrator --porcelain

wp cap remove editor delete_others_pages delete_pages delete_private_pages delete_published_pages manage_categories manage_links moderate_comments

wp maintenance-mode deactivate

Was macht das?

Default-Einstellungen werden gesetzt

  • Systemsprach wird auf de_DE_formal gesetzt
  • Zeitzone wird auf Europe/Berlin gesetzt
  • Zeitformat auf G:i und Datumsformat auf d. F Y gesetzt
  • Anpassen der Standart Kategorie
    • Umbenennen in Aktuelles
    • Slug-Anpassung auf aktuelles
  • Permalinks wird auf /%category%/%postname%/ gesetzt, so das die Blog-Beiträge immer im Subfolder /aktuelles/ ausgespeilt werden
  • Bildgrößen der Standard-Mediendateien werden in den Pixelgrößen verdoppelt (2048, 600 & 300)
  • Anlegen von monats- und jahresbasierten Ordnern wird deaktiviert
  • Administrator-E-Mail-Adresse wird auf example@example.de gesetzt
  • Zusätzlicher Admin-Nutzer – hej.admin
  • Anpassungen der Nutzerrolle Redakteur (diese Berechtigungen werden deaktiviert):
    • delete_others_pages
    • delete_pages
    • delete_private_pages
    • delete_published_pages
    • manage_categories
    • manage_links
    • moderate_comments
  • Anpassung der wp-config
    • WP_POST_REVISIONS 8
    • DISALLOW_FILE_EDIT true
    • EMPTY_TRASH_DAYS 30
    • WP_EMOICONS false
    • WP_MEMORY_LIMIT ‚256M‘
    • WP_MAX_MEMORY_LIMIT ‚512M‘
    • IMAGE_EDIT_OVERWRITE true
    • SEOPress Lizenzschlüssel hinterlegen

Standard-Setup, das wird alles installiert

Themes

Plugins

Premium Plugins die nicht im WordPress Verzeichnis sind

  • Blocksy Companion Premium
  • GenerateBlocks Pro
  • WP Rocket
WP-CLI einmal im Einsatz

Was bedeutet WP-CLI?

WP-CLI Logo

Durch die WP-CLI kannst du WordPress über die Kommandozeile eines Terminals steuern. Das WP steht da natürlich ganz klar als Abkürzung für WordPress 😅 und CLI für Command Line Interface.

Dieses Kommandozeilen-Werkzeug kommt nicht direkt mit WordPress mit. Es ist eine Zusatzsoftware welche auf deinem Server installiert sein muss. Viele Hoster haben das jetzt schon installiert so das du es direkt nutzen könntest. Wenn du es nicht genau weißt frage einfach einmal bei deinem Hoster nach.

Diese Software bildet dann eine Brücke zwischen deinem Terminal und deiner installierten WordPress Instanz.

Noch mehr darüber findest du entweder auf der eigene Website der WP-CLI oder im WordPress Handbuch.

Nutzung der WP-CLI

Kommen wir zum Kern. Warum sollte ein Kommandenzeilen Tool jetzt so gut sein?

Alle Einstellungen die du sonst immer wieder aufs neue durchgehen musst kannst du so ganz einfach abarbeiten lassen. Nebenbei. Und du vergisst auch nichts mehr 😉

Grundeinstellungen in die wp-config schreiben

Ich habe mir angewöhnt immer ein paar Zeilen zusätzlich in die wp-config.php aufzunehmen.

Vorher

Dazu musste ich mich sonst immer mit SFTP mit den Server verbinden, die Datei öffnen, die Code-Zeilen raussuchen, kopieren, einfügen, speichern und wieder hochladen.

Jetzt

Verbinde ich mich mit dem Server über das Terminal (SSH), rufe den Ordner der WordPress Instanz auf und kopiere diese Zeilen hinein.

wp config set DISALLOW_FILE_EDIT true --raw
wp config set IMAGE_EDIT_OVERWRITE true --raw
wp config set EMPTY_TRASH_DAYS 30 --raw
wp config set WP_POST_REVISIONS 8 --raw
wp config set WP_EMOICONS false --raw
wp config set WP_MEMORY_LIMIT '256M'
wp config set WP_MAX_MEMORY_LIMIT '512M'
wp config set SEOPRESS_LICENSE_KEY 'XXXXXXX'

Alle 8 Variablen werden direkt in die wp-config geschrieben und direkt vom System berücksichtig und genutzt.

Bei manchen Plugins kann der Lizenz-Schlüssel in der wp-config hinterlegt so das man das später auch nicht erst raussuchen muss. Hier als Beispiel die Pro Version von SEOPress.

Standard Plugins und Themes löschen

Jedesmal wenn man WordPress, über eine Hosting One-Klick Lösung, installiert werden gleichzeitig Standard Themes und zwei Plugins mit geladen. In den allermeisten Fällen benötige ich diese nicht. Bei mir bleibt immer nur das aktuellste Twenty Twenty Theme als Fallback Lösung im System.

Mit Hilfe von

wp plugin delete hello-dolly akismet
wp theme delete twentytwentytwo twentytwentythree

Werden beide Plugins und die nicht genutzten Themes gelöscht. Bei den Themes schau ich immer mal wieder welche aktuell mit geliefert werden und passe es an.

Gewünschte Standard Einstellung setzen

Bei mir ist es meistens so das ich noch einiges „richtig“ einstellen möchte und muss. Das meiste ist auf verschiedenen Unterseiten in den Einstellungen und würde somit immer etwas mehr Zeit in Anspruch nehmen.

Zeitzone, Zeitformat und Mediathek-Einstellungen

An sich nur die normalen Anpassungen an die richtige Region.

Und eine Option die meistens vergesse. Viele meiner Projekte brauchen es einfach nicht das die Medien in Jahres und Monatsordnern abgelegt werden. Außerdem legt WordPress diese Ordner auch an wenn garnichts hochgeladen wird. So bleiben die Systeme auch etwas aufgeräumter.

wp option update timezone_string "Europe/Berlin"
wp option update time_format "G:i"
wp option update date_format "d. F Y"

wp option update large_size_w 2048
wp option update large_size_h 2048
wp option update medium_size_w 600
wp option update medium_size_h 600
wp option update thumbnail_size_w 300
wp option update thumbnail_size_h 300
wp option update uploads_use_yearmonth_folders 0

Das anpassen der Mediengrößen ist einfach nur eine persönliche Präferenz von mir.

Anpassung und Erstellen von Seiten und Beitrags-Kategorien und Permalink-Struktur

Jedes WordPress hat bei der Installation schon einen Beitrag und aktuell 2 Seiten erstellt.

Warum immer erst alles löschen und neu erstellen wenn man doch alles gleich nutzen kann und einfach nur anpasst. So benenne ich eine Seite direkt Startseite und die andere wird auf Datenschutzerklärung gesetzt. Ein Impressum brauchen ebenfalls alle Websites, also direkt mit erstellen.

Persönlich bin ich ein Freund von Ordnung, deswegen bekommen alle Seiten auch gleich eine Zahl für die Reihenfolge zugewiesen.

Da es die Startseite immer auf eine Seite verweisen sollte, früher war das die aktuellesten Beiträge im Blog, wird diese Einstellung direkt mit angepasst.

wp post update 2 --post_name='start' --post_title='Startseite' --post_status=publish --menu_order='100'
wp post update 3 --post_name='datenschutz' --post_title='Datenschutzerklärung' --menu_order='800' --post_status=publish
wp post create --post_type=page --post_name='impressum' --post_title='Impressum' --menu_order='810' --post_status=publish

wp option update page_on_front 2
wp option update show_on_front page

wp term update category 1 --name='Aktuelles' --slug='aktuelles'

wp rewrite structure '/%category%/%postname%/'
wp rewrite flush

Danach wird noch die Standard-Kategorie in Aktuelles umbenannt und die Permalink-Struktur auf /%category%/%postname%/ gesetzt.

Damit hätten wir das WordPress in den Grundeinstellungen konfiguriert und es kann weitergehen mit Sonderwünschen 🤪

Plugins und Themes

Auch wenn der WordPress Core immer besser wird, verlangen die meisten Projekt noch etwas mehr.

Das WordPress Verzeichnis (Plugins, Themes) bietet da extrem viel an. Die hier hinterlegte Plugins und Themes sind nur ein Beispiel und Auszug aus meinem WordPress Stack den ich gern nutze.

Installieren von Plugins und Themes

wp plugin install disable-comments disable-embeds embed-privacy enable-media-replace fluent-security fluent-smtp fluentform generateblocks imagify preferred-languages wp-seopress simple-revisions-delete statify svg-support webp-uploads

wp plugin install https://PATH/blocksy-companion-pro.zip  
wp plugin install https://PATH/generateblocks-pro.zip
wp plugin install https://PATH/wp-rocket.zip

wp theme install blocksy

Natürlich gibt es auch bezahlte Premium Versionen die nicht im WordPress Verzeichnis liegen. Damit du diese aber ebenfalls gleich mit installieren kannst musst du ein wenig mehr Aufwand in Kauf nehmen.

Du musst dir selber einen Ort schaffen über die die Plugins oder Themes geladen werden können. Bei mir ist das meist ein sehr kryptischer Ordnername worin dann die ZIP-Dateien liegen.

Aktivieren und Einrichten

Nach der Installation kannst du direkt die immer benötigte Pakete aktivieren.

Manche Plugins erlauben auch jetzt schon das du Einstellungen direkt über die WP-CLI einrichten kannst.

wp plugin activate disable-comments disable-embeds embed-privacy enable-media-replace fluent-security fluent-smtp generateblocks generateblocks-pro preferred-languages simple-revisions-delete svg-support webp-uploads

wp disable-comments settings --types=all --xmlrpc --rest-api --disable-avatar

Sprache einstellen

Nachdem alles installiert ist kümmere ich mich noch darum das alles in der richtigen Sprache verfügbar ist.

wp language core install de_DE_formal de_DE
wp site switch-language de_DE_formal

wp language plugin install --all de_DE de_DE_formal
wp language theme install --all de_DE de_DE_formal
wp language core update

Anlegen eines Benutzers

Da ich auch mit anderen zusammenarbeite, lege ich gern einen gebrandeten Admin-User zusätzlich an.

So muss ich mein Passwort nicht rausgeben und da dieser Nutzer auf eine Verteiler-Emailadresse läuft, kann da das Passwort, auch ohne mich zu brauchen, zurückgesetzt werden wenn nötig.

wp option update admin_email example@example.de
wp user create hej.admin example@example.de --role=administrator --display_name=hejADMIN --user_nicename=hejADMIN --user_url=https://hejchris.de --first_name=hej --last_name=Administrator --porcelain

Anpassung von Nutzerrollen Berechtigungen

Manchmal möchte man einzelne Benutzerrollen etwas anpassen. Das ist ebenfalls sehr einfach möglich.

wp cap remove editor delete_others_pages delete_pages delete_private_pages delete_published_pages manage_categories manage_links moderate_comments

Wartungsmodus steuern

Zum Start und Ende setze ich noch den Status für den Wartungszustand.

wp maintenance-mode activate

...

wp maintenance-mode deactivate

Ständige Optimierung

Mein WP-CLI Skript oder sagen wir aktuell eher die Befehlssammlung wird in einem Git gespeichert. Immer wenn ich merke das ich etwas mehrfach wiederhole, versuche ich das direkt mit aufzunehmen und anzupassen. Im Git kann ich dann gut Dokumentieren was sich geändert hat.

Beitrag teilen
Christopher Kurth

Christopher Kurth

Online & Web Engineer. Human. Selbstständig bei eria.studio. WordPress'ler in der zollsoft GmbH. Organisator von WordPress Meetup Jena. Auf Reise mit drei Zöpfe ein Bart.

5 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert