WordPress Multisite mit DDEV
Vor einer Weile habe ich alle meine lokalen Entwicklungsumgebungen für WordPress-Projekte auf DDEV umgestellt. Für einfache Projekte ist das auch echt schnell gemacht. Aber was muss man eigentlich tun, wenn man eine WordPress Multisite mit Subdomains in DDEV an den Start kriegen will?
Ich gehe in diesem Beitrag davon aus, dass dir die Grundlagen von WordPress Multisite und DDEV vertraut sind. Details kannst du in der jeweiligen Dokumentation nachlesen.
wp-config
anpassen
Zunächst das recht Offensichtliche. Neben dem üblichen DDEV-Snippet, das in die wp-config.php
eingefügt werden muss
und mit dem die wp-config-ddev.php
geladen wird, muss auch die Konfiguration der Multisite angepasst werden. In meinem
Fall sieht das so aus:
/* Multisite */
define('WP_ALLOW_MULTISITE', true );
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
// adjust to the main site url as set in `wp-config-ddev.php`
define('DOMAIN_CURRENT_SITE', 'my-project.ddev.site');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
DDEV Konfiguration anpassen
Bei der Konfiguration der Domain in DDEV, können wir uns zu Nutze machen, dass der DNS A-Record für alle Subdomains von
ddev.site
, also z.B. my-project.ddev.site
global auf 127.0.0.1
zeigt. Das gilt auch für Sub-Subdomains wie
blog.my-project.ddev.site
oder en.my-project.ddev.site
, die wir ja für unsere Multisite verwenden möchten.
Damit das Routing aber funktioniert, müssen wir dem DDEV-Projekt noch beibringen, dass es auch auf diese Sub-Subdomains
reagieren soll. Dazu fügen wir in der Datei .ddev/config.yaml
den Key additional_hostnames
hinzu:
# just for context
name: my-project
type: wordpress
php_version: "8.4"
# add additional_hostnames
additional_hostnames:
- "my-project"
- "*.my-project"
In meinem Fall nutze ich dabei einfach *.my-project
, sodass alle Sub-Subdomains verwendet werden können. Natürlich
kannst du hier bei Bedarf auch spezifischer vorgehen.
Datenbank anpassen
Damit die Domains und Subdomains auch in der Datenbank passen, müssen dort auch noch ein paar Werte geändert werden. Dabei gehen wir genauso vor, wie bei einer normalen Domainänderung einer Multisite. Wenn du also schon öfters die Domain einer Multisite geändert hast, weißt du, was jetzt kommt.
Bonus-Tipp: Ich nutze für den Zugriff auf die Datenbank Sequel Ace, eine MySQL/MariaDB
Datenbank-Management-Software für macOS, die sich sehr einfach mit DDEV verbinden lässt: nur ddev sequelace
ausführen
und das Program öffnet sich – direkt mit der passenden DB verbunden.
(Ich nehme an, dass du, wenn du den Präfix deiner Datenbanktabellen geändert hast, weißt, was du tust, und die folgenden Tabellennamen entsprechend anpassen kannst.)
Tabelle wp_site
Hier muss in das Feld domain
der Wert rein, der auch schon in der wp-config.php
für DOMAIN_CURRENT_SITE
gesetzt
ist.
- Ohne Protokoll-Präfix
- Ohne
/
-Suffix - Beispiel:
my-project.ddev.site
Tabelle wp_sitemeta
Der Wert für siteurl
muss angepasst werden. (Nicht wundern, bei mir stand er nicht wie aus wp_options
gewohnt am
Anfang der Tabelle, sondern mit der meta_id=14
etwas weiter unten.)
- Mit Protokoll-Präfix (
https://
) - Mit
/
-Suffix - Beispiel:
https://my-project.ddev.site/
Tabelle wp_blogs
In wp_blogs
wird eine Liste der eingerichteten Websites geführt. Passe jeweils den Wert für domain
an.
- Ohne Protokoll-Präfix
- Ohne
/
-Suffix - Beispiel:
my-project.ddev.site
,blog.my-project.ddev.site
Tabellen wp_options
und wp_#_options
Vielleicht hast du die Änderung in der Tabelle wp_options
bei der Umstellung auf DDEV sowieso schon gemacht. Es gibt
aber für jede einegerichtete Website der Multisite eine solche Tabelle, also z.B. wp_2_optitons
. In diesen Tabellen
müssen jeweils die Werte für siteurl
und home
angepasst werden.
- Mit Protokoll-Präfix (
https://
) - Ohne
/
-Suffix - Beispiel:
https://my-project.ddev.site
,https://blog.my-project.ddev.site
Fazit
Wenn man die richtige Stelle kennt, an der man die Hostnames ergänzen muss, ist die Nutzung einer WordPress Multisite mit DDEV eigentlich recht unkompliziert, abgesehen von dem Hick-Hack mit den Slashes und Protokoll-Präfixes in der Datenbank, die mich jedes Mal ein graues Haar kosten.