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.