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 aufd. 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
- Blocksy (WP-Verzeichnis)
- und ein passendes Child-Theme
Plugins
- Disable Comments – WP Verzeichnis
- Disable Embeds – WP Verzeichnis
- Embed Privacy – WP Verzeichnis
- Enable Media Replace – WP Verzeichnis
- FluentAuth – WP Verzeichnis
- FluentSMTP – WP Verzeichnis
- FluentForms – WP Verzeichnis
- GenerateBlocks – WP Verzeichnis
- Imagify – WP Verzeichnis
- Preferred Languages – WP Verzeichnis
- SEOPress – WP Verzeichnis
- Simple Revisions Delete – WP Verzeichnis
- Statify – WP Verzeichnis
- SVG Support – WP Verzeichnis
- Modern Image Formats – WP Verzeichnis
Premium Plugins die nicht im WordPress Verzeichnis sind
- Blocksy Companion Premium
- GenerateBlocks Pro
- WP Rocket
Was bedeutet WP-CLI?
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.
Großartig! Endlich habe ich dein Setup 😃
Vielen Dank für die ausführliche Erklärung.
Ist nicht 100% mein Setup, da fehlen noch so ein paar Kleinigkeiten. Manchmal setze ich auch auf was anderes 😉 kommt natürlich immer etwas auf das Projekt an.
Klasse Beitrag. 🎉
Danke 😊 dabei sollte natürlich auch dein Beitrag mit Erwähnung finden 😉
https://haurand.com/wp-cli-bash-script-zur-erstellung-einer-wordpress-instanz-unter-laragon/
Danke, Christopher – toller Artikel!
Hatte ein paar Dinge dabei, die ich noch nicht kannte und in unsere eigenen Scripts übernehmen sollte.