Ein WordPress-Entwickler verrät seine Tricks: Teil 1

Mike
Mike, Team Lead Backend
15 Mai 2019
Ein WordPress-Entwickler verrät seine Tricks: Teil 1

Einführung


Wer bin ich?

Mein Name ist Michael Damoiseau. Ich arbeite momentan als PHP-Entwickler bei buzzwoo, einer Digitalagentur mit Standorten in Stuttgart, München (Deutschland) und Chiang Mai (Thailand). Hier in Chiang Mai bin ich der Backend-Teamleiter, wobei ich hauptsächlich mit Laravel und WordPress Frameworks arbeite. 

Übrigens… bevor wir loslegen: Klingt Arbeiten in Thailand spannend für dich? Wir suchen in unserem Büro in Chiang Mai immer wieder nach talentierten Entwicklern. Schau mal hier


Aber jetzt zum eigentlichen Thema: Worum geht’s hier eigentlich?

Natürlich sind nicht alle Tools, die ich im Laufe dieser Artikelreihe ansprechen werde, für alle Arten von Projekten relevant. Es liegt ganz im Ermessen des Entwicklers, welche Tools in welchen Situationen Sinn ergibt (Braucht man beispielsweise wirklich Unit-Tests, wenn man ein gekauftes Theme verwendet?). 

Damit die Sache nicht allzu unübersichtlich und schwer zu verdauen wird, habe ich meine Inhalte in mehrere, kleinere Artikel aufgeteilt: 

Interessiert?
Kontaktieren
Sie uns!

Teil I : Was ist WordPress und wie man mit WP-CLI den Flow verbessert (dieser Artikel)

Teil II : WordPress Plugins und Themes mit dem WordPress Unit Testing überprüfen (demnächst)

Teil III : Kontinuierliche Integration und WordPress-Entwicklung (demnächst)

Teil IV : Wie wir unsere Tools noch verbessert haben (demnächst)

Was ist WordPress?
WordPress ist ein auf PHP und MySQL basierendes CMS-Framework. Es wurde von Matt Mullenweg und Mike Little entwickelt und im Mai 2003 (also vor 15 Jahren!!) veröffentlicht.

WordPress selbst war eine Abspaltung des CMS b2/cafelog. Man kann sich vorstellen, wie alt manche Teile des Codes sind! 

Hört man Negatives über WordPress, lauten die Beschwerden meist, dass WordPress eine reine Blogging-Plattform ist, die sich nicht skalieren lässt und die nur für kleine Webseiten und/oder Blogs geeignet ist. 

Es ist natürlich richtig, dass WordPress zu Beginn als Blogging-Plattform gedacht war und richtig nützlich ist, um eine Blog-Website zu verwalten. Allerdings muss auch gesagt werden, dass es bereits seit Version 3, die im Juni 2010 veröffentlicht wurde, die Möglichkeit gibt, eigene Inhaltstypen (sogenannte Custom Post Types) anzulegen. 

Seitdem ist es auch mit WordPress überhaupt kein Problem mehr, wesentlich mehr unterschiedliche Inhaltstypen zu handhaben – in Wahrheit so gut wie alles, was man jemals brauchen könnte; angefangen von E-Commerce-Plattformen, auf denen tausende Produkte gespeichert werden müssen, bis hin zu mehrseitigen Plattformen, die hunderte verschiedene Websites unter einer Instanz hosten können.

Letzteres kann wohl mit einem simplen Beispiel am besten verdeutlicht werden: Die Plattform, auf der alle WordPress Plugins gehostet werden, läuft selbst auf WordPress. 

Als Conclusio können wir sagen, dass WordPress eine mächtige Plattform ist, die für unterschiedlichste Projekte eingesetzt werden kann. Damit will ich natürlich nicht sagen, dass WordPress die perfekte Lösung für jedes erdenkliche Projekt ist. Allerdings kann WordPress in vielen Situationen sehr hilfreich sein – deshalb sollte man sich nicht von den vielen einseitigen Aussagen verunsichern lassen, die besagen, dass WordPress komplett veraltet ist oder aus irgendeinem anderen zufälligen Grund nervt. 
Wie immer liegt es ganz im Ermessen des Entwicklers, die besten Tools für den Job zu identifizieren – und nach der Lektüre meiner Artikel werden hoffentlich mehr Leute WordPress als sinnvolle Option für zukünftige Projekte erkennen.

Die Tools und der Development Flow

Also, wir merken uns: WordPress ist eine (gute) Plattform, mit der sich verschiedenste Anforderungen handhaben lassen… Das ist schon mal großartig, allerdings kann man mit WordPress noch so viel mehr anstellen!

Jetzt habe ich zwei Fragen… Die meisten Entwickler, die ich kenne, würden übrigens beide Fragen mit „Nein“ beantworten. Allen Leuten, deren Antworten jetzt ebenfalls „Nein“ lauten würden, würde ich vorschlagen, doch diesen Artikel zu Ende zu lesen – am Ende wird noch der Ein oder Andere überrascht sein. Und ein paar interessante Fakten zu WordPress werden sich wohl auch die meisten mitnehmen können.

Interessiert?
Kontaktieren
Sie uns!

Dann los:

1. Wusstest du schon, dass es ein Kommandozeilen-Tool namens WP-CLI gibt, mit dem man innerhalb von WordPress unter Nutzung der Kommandozeile so gut wie alles anstellen kann? Das Runterladen und Installieren einer neuen WordPress-Instanz dauert beispielsweise nicht länger als 30 Sekunden, wenn man den korrekten Flow anwendet (mehr dazu weiter unten).

2. Wusstest du außerdem, dass du deine Plugins und Themes mit Unit-Tests überprüfen kannst?

Die Tools, die in diesen beiden Fragen zur Anwendung kommen, sind von vornherein schon recht nett. Jetzt können wir allerdings entscheiden, dass wir diese Tools zusammen mit einem Tool zur Kontinuierlichen Integration verwenden möchten, wie z.B. Gitlab. Dann werden aus unseren netten Tools nämlich richtig mächtige Werkzeuge, die man sich als Entwickler zunutze machen sollte, um richtig guten, bug-freien Code abzuliefern.

Was ist WP-CLI?

WP-CLI ist das Kommandozeile-Tool für WordPress. Es erlaubt Entwicklern, jeden Befehl auszuführen, den man auch im Admin-Bereich einer WordPress-Website nur mit der Kommandozeile ausführen würde. Einen Webbrowser braucht man dabei nicht, daher ist WP-CLI das perfekte Tool für jeden echten Developer 😉

Wie funktioniert die Installation?

1. Lade das Tool mit curl (oder wget) herunter:  curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

2. Mache die Datei ausführbar: chmod +x wp-cli.phar

3. Verschiebe sie an einen Ort, auf den von überall zugegriffen werden kann: sudo mv wp-cli.phar /usr/local/bin/wp

Wenn man diesen Schritten genau folgt, sollte WP-CLI anschließend auf dem Computer verfügbar sein. Testen können wir das, indem wir die folgende Kommandozeile eingeben: wp –info. Daraufhin sollten Informationen über die jeweilige WP-CLI Version angezeigt werden.

Was kann man damit anstellen?

Man kann:
Alle Posts auflisten: wp post list

Alle Posts eines Custom Post Types (also eigene Inhaltsstypen) auflisten: wp post list --post_type="my_cpt"v, wobei my_cpt der Name des konkreten Inhaltstyps ist.
Einen Post löschen: wp post delete post_id  , wobei post_id

die ID des zu löschenden Posts ist.
Bei diesen drei Befehlen handelt es sich um alle grundlegenden Commands. Der Clou an der Sache ist, dass man die Befehle kombinieren kann, um noch mächtigere Commands zu basteln.


Nehmen wir beispielsweise an, dass wir alle Posts eines beliebigen Custom Post Types löschen möchten: wp post delete $(wp post list --post_type='my_cpt' --format=ids) --force , wobei my_cpt der Name des konkreten Inhaltstyps ist. 
Vielleicht möchten wir auch alle Posts löschen, die gerade im Papierkorb-Ordner liegen: wp post delete $(wp post list --post_status=trash --format=ids)

WordPress runterladen und installieren

Es gibt zwei Wege, wie wir WordPress herunterladen und installieren können:
Die erste, mühsamere Methode, ist die manuelle Methode. Also, zählen wir kurz alle Schritte auf, die notwendig sind, um WordPress manuell herunterzuladen oder zu installieren:

  1. Zuerst öffnen wir den Browser
  2. Dann gehen wir auf https://de.wordpress.com/
  3. und laden die Datei unter https://de.wordpress.org/download/ herunter
  4. Anschließend müssen wir die Datei entpacken 
  5. Und mit PHPMyAdmin eine Datenbank erstellen und konfigurieren (was ein paar zusätzliche Schritte erfordert)
  6. Dann gehen wir zu unserer WordPress-URL und konfigurieren unsere Website: 
  7. Zuerst wählen wir die Sprache aus
  8. und geben anschließend die Anmeldedaten für die Datenbank ein
  9. Dann führen wir die Installation aus (Titel der Website, Benutzeranmeldedaten des Administrators)
  10. Jetzt können wir uns endlich mit unserem neuen Admin-Konto einloggen

Wie unschwer zu erkennen ist, erfordert diese Methode das Ausführen mehrerer Schritte, damit WordPress reibungslos funktioniert (Die Schritte für die Erstellung der Datenbank habe ich hier wie bereits erwähnt nicht mitgezählt, die muss man sich noch dazu denken).
Weil wir uns alle gerne das Leben einfacher machen, werden wir versuchen, diese Prozedur mithilfe von WP-CLI abzukürzen. Hier also die zweite Variante, die wir mehr oder weniger automatisiert haben, indem wir alles über die Kommandozeile erledigen.

1. Zuerst öffnen wir das Terminal

2. und Erstellen unsere Datenbank:  mysql -uDB_USER -pDB_PASSWORD -e "CREATE DATABASE IF NOT EXISTS DB_NAME DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"

Wobei:
– DB_USER unser Datenbank-Benutzer 
– DB_PASSWORD das Passwort für die Datenbank und
– DB_NAME der Name unserer Datenbank ist 

3. Jetzt gehen wir zum Ordner, in dem wir unsere WordPress-Installation speichern wollen

4. und laden anschließend WordPress runter: wp core download

5. Dann Konfigurieren wir die Anmeldedaten für unsere Datenbank: wp core config --dbname=DB_NAME --dbuser=DB_USER --dbpass=DB_PASSWORD

Wobei:
– DB_NAME der Name der Datenbank
– DB_USER unser Datenbank-Benutzer und
-DB_PASSWORD das Passwort für unseren Datenbank-Benutzer ist. 

6. Zum Schluss konfigurieren wir die WordPress-Instanz: wp core install — url=http://localhost--title=WordPress --admin_user=mike --admin_password=MySuperPassword --admin_email=mike@example.com

Das war’s schon! Jetzt haben wir ein sofort einsatzbereites WordPress! Einige werden es sich vielleicht schon denken können, was ich als Nächstes vorhabe… Nämlich… Die Default Themes und Plugins deaktivieren. Na, habt ihr’s erraten? 

Und das machen wir so:

1. wp plugin uninstall hello --deactivate && wp plugin uninstall akismet --deactivate && wp theme delete twentyfourteen && wp theme delete twentysixteen

Wow! Dieser Befehl hat uns ein sauberes WordPress beschert, das wir sofort nutzen können!
Wer den Code genauer beäugt hat, dem wird vermutlich der special separator && aufgefallen sein. Damit können wir mehrere Befehle in nur einer Zeile ausführen. Sagt Bescheid, wenn ihr mehr darüber wissen wollt! 😉

Die Installation automatisieren

Wir haben also festgestellt, dass es ziemlich einfach ist, eine neue WordPress-Installation durchzuführen und zu konfigurieren. Allerdings gibt es einen Aspekt bei dieser Prozedur, der mich persönlich nervt: Nämlich, dass ich nicht besonders begabt darin bin, mir die Befehle fehlerfrei auswendig zu merken. Deshalb passiert es mir leider häufig, dass ich falsche Parameter eingeben, was irgendwann ganz schön nervt.

Allerdings gibt es, Gott sei Dank, eine Lösung für unsere Code-Gedächtnisschwäche: Wir können den Prozess so weit es geht automatisieren. Dadurch können wir jedes Mal, wenn wir eine neue WordPress-Installation durchführen, wertvolle Zeit sparen.

Wenn ich mit einem neuen Projekt beginne, folge ich immer folgendem Template. Dadurch wird die gesamte Installation bedeutend einfacher. Dabei nutze ich zwei Verzeichnisse: htdocs für die Website und development für die Entwickler-Tools. 

Die Ordnerstruktur meiner Projekte sieht dabei folgendermaßen aus:

/var/www/project-name
 |__ /htdocs
 |__ /development

Damit wir den Installationsprozess automatisieren können, müssen wir ein kleines Shell-Skript schreiben. Keine Panik, wenn du mit der dazugehörigen Syntax noch keine Erfahrung hast, denn die ist glücklicherweise recht unkompliziert. Gespeichert wird das Skript in der Datei development/setup.sh.

Achtung Windows-Nutzer!: In diesem Fall muss man zuerst eine .BAT-Datei erstellen. Allerdings ist das BAT-Format für mich persönlich ziemlich unbekanntes Territorium, daher spare ich mir das Thema lieber für ein zukünftiges Update dieses Artikels auf, ok? 

Weiter geht´s: 

Ein Shell-Skript muss immer mit der folgenden Zeile beginnen: 

#!/bin/bash

Denken wir jetzt kurz über die Parameter nach, die für jede Installation unterschiedliche Werte aufweisen müssen. Mir fallen dabei zwei verschiedene Werte-Sets ein: Die Datenbank-Anmeldedaten und die Website-Einstellungen.

Diesen Umstand können wir auf zwei verschiedene Wege handhaben: Wir können 1. beim Ausführen des Skripts die Parameter in der Kommandozeile anwenden oder wir können die Variablen innerhalb des Skripts nutzen. Mir ist persönlich die zweite Methode lieber – ganz einfach aus dem Grund, weil man sich bei Methode 1 die Namen aller Parameter merken muss – und dass das Merken von Dingen nicht meine große Stärke ist, haben wir ja bereits erörtert…

Also Nummer 2: 

#####
# Diese Variablen müssen bei jedem Projekt verändert werden:
#####
PROJECT=”project_name”
WP_USER=”admin_name”
WP_PASSWORD=”admin_password”
WP_EMAIL=”admin@example.com”
WP_TITLE==”WordPress”
DB_USER=”root”
DB_PASSWORD=”root_password”
DB_HOST=”localhost”

Das Skript befindet sich übriges im Folder development, daher müssen wir sicherstellen, dass wir die WP-CLI-Befehle vom richtigen Ordner aus ausführen ( htdocs )

#root directory
echo “Start script: change to project-root directory”
cd ..

Jetzt die Datenbank erzeugen:

#create database
mysql -uD$B_USER -p$DB_PASSWORD -e “CREATE DATABASE IF NOT EXISTS \`${PROJECT}\` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;”

Zu guter Letzt können wir die verschiedenen Kommandozeilen ausführen, um die WordPress-Instanz herunterzuladen, zu konfigurieren und zu installieren:

# Install and create WordPress config file
wp core download
wp core config — dbname=$PROJECT — dbuser=$DB_USER — dbpass=$DB_PASSWORD
wp core install — url=$PROJECT.dev — title=$WP_TITLE — admin_user=$WP_USER — admin_password=$WP_PASSWORD –admin_email=$WP_EMAIL

Eine kleine Zusatzaufgabe: Da wir die Default-Plugins und Themes für WordPress nicht brauchen, können wir sie einfach direkt entfernen:

# Uninstall unnecessary plugins
wp plugin uninstall hello --deactivate
wp plugin uninstall akismet –deactivate
# Uninstall unnecessary themes
wp theme delete twentyfourteen
wp theme delete twentysixteen

Wenn wir fertig sind, können wir dem Nutzer eine nette Botschaft hinterlassen: echo "DONE!"

Nun, da unser praktisches Skript bereit zur Anwendung ist, können wir ihm den letzten Schliff verleihen (was bedeutet, dass wir es ausführbar machen). Nämlich mit der folgenden Kommandozeile: chmod +x development/setup.sh

Zu guter Letzt führen wir noch das Setup-Skript

cd development
./setup.sh

aus und beten, dass uns jetzt keine Error-Nachricht heimsucht.
Der Vollständigkeit halber hier noch einmal der gesamte Inhalt des Skripts: 

#!/bin/bash
#####
# These are the variables you must change for each of your project:
#####
PROJECT="project_name"
WP_USER="admin_name"
WP_PASSWORD="admin_password"
WP_EMAIL="admin@example.com"
WP_TITLE=="WordPress"
DB_USER="db_user"
DB_PASSWORD="db_password"
DB_HOST="localhost"
#root directory
echo "Start script: change to project-root directory"
cd ..
#create database
mysql -uroot -pbuzzwoo -e "CREATE DATABASE IF NOT EXISTS \`${PROJECT}\` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
# Install and create WordPress config file
wp core download
wp core config --dbname=$PROJECT --dbuser=$DB_USER --dbpass=$DB_PASSWORD
wp core install --url=$PROJECT.dev --title=$WP_TITLE --admin_user=$WP_USER --admin_password=$WP_PASSWORD --admin_email=$WP_EMAIL
# Uninstall unnecessary plugins
wp plugin uninstall hello --deactivate
wp plugin uninstall akismet –deactivate
# Uninstall unnecessary themes
wp theme delete twentyfourteen
wp theme delete twentysixteen
echo "DONE!"

Fazit:

Ich hoffe stark, dass der Ein oder Andere ein paar nützliche Dinge aus diesem Artikel mitnehmen konnte. 

Nochmal zusammengefasst: Wir haben mehr über das WordPress Kommandozeile-Tool WP-CLI erfahren und festgestellt, wie nützlich es sein kann. Außerdem haben wir uns angesehen, wie wir die Installation einer neuen WordPress-Instanz mithilfe von WP-CLI und einem kleinen Shell-Skript automatisieren können. 

Mit dieser Methode dauert das Erstellen einer neuen WordPress-Website nicht länger als 30 Sekunden. Klar, es gibt ein paar Extra-Schritte, die notwendig sind, wie z.B. die Konfiguration des Apache/Nginx-Webservers, die Installation von WP-CLI, falls die Binärdateien auf dem Server nicht vorhanden sind etc.

Aber mit diesen Dingen werden wir uns später, in einem anderen Teil des Artikels noch beschäftigen. 

Das war’s hier an dieser Stelle erstmal. Ich hoffe sehr, dass euch der Artikel gefallen hat. Falls ihr Vorschläge/und oder Korrekturen habt, sagt mir Bescheid! Ciao! 

Haben Sie Fragen oder benötigen eine individuelle Beratung zu dem, was Sie gerade gelesen haben? Zögern Sie nicht, uns zu kontaktieren! Besuchen Sie unsere Kontaktseite und lassen Sie uns ein Gespräch darüber beginnen, wie wir Ihnen helfen können, Ihre Ziele zu erreichen.

Mucki

Jetzt Beratungsgespräch vereinbaren:

Marcus Renz

Geschäftsführung

+49 711 217258 42

Email schreiben