Wie @ tom-j-nowell im Kommentar zu OP sagte, kann Multisite dies einfacher machen.
Leistung und Sicherheit sind für Multisite kein wirkliches Problem (zumindest nicht mehr als für reguläre Installationen), aber ich stimme zu, dass Multisite manchmal ein Problem sein kann, da viele Plugins (entweder benutzerdefinierte oder Drittanbieter) dies möglicherweise nicht tun Arbeiten Sie ordnungsgemäß auf mehreren Websites oder weil Sie Benutzer verschiedener Websites vollständig voneinander trennen möchten.
Das heißt, was Sie erreichen wollen, ist nicht so schwer.
Was Sie zwischen der Installation ändern müssen, ist:
- Plugins-Ordner
- Themenordner
- Datenbankeinstellungen
Diese Konfiguration kann mithilfe von Konstanten durchgeführt werden.wp-config.php
Ihr einziges Problem besteht darin, sie basierend auf der URL zu wechseln.
Die Servervariable 'SERVER_NAME'
sollte für Sie funktionieren, zumindest wenn Ihr Webserver ordnungsgemäß konfiguriert ist.
Beispielsweise können Sie einen Ordner erstellen, /conf
der auf derselben Ebene von wp-config.php
Datei und /WordPress
Ordner benannt ist.
In diesem Ordner können Sie einige Dateien hinzufügen:
branch1.domain.com.conf
branch2.domain.com.conf
branch3.domain.com.conf
In jedem von ihnen kann man so etwas tun
$branch = 'branch1';
$base_dir = dirname( __DIR__) . "/{$branch}";
defined( 'WP_CONTENT_DIR' ) or define( 'WP_CONTENT_DIR', $base_dir );
// be sure WP understand URLs correctly
defined( 'DB_HOME' ) or define( 'DB_HOME', "{$branch}.example.com" );
defined('WP_SITEURL') or define('WP_SITEURL', "{$branch}.example.com/WordPress");
// adjust DB settings as needed
defined( 'DB_NAME' ) or define( 'DB_NAME', $branch );
defined( 'DB_USER' ) or define( 'DB_USER', $branch );
defined( 'DB_PASSWORD' ) or define( 'DB_PASSWORD', '********' );
unset( $base_dir, $branch );
Dies ändert sich für jede Konfigurationsdatei entsprechend der "Verzweigung".
Danach können Sie in Ihrem Unikat wp-config.php
so etwas wie:
$defaults_conf = [
'WP_CONTENT_DIR' => __DIR__ . '/branch1',
'DB_HOST' => 'localhost',
'DB_NAME' => 'branch1',
'DB_USER' => 'branch1',
'DB_PASSWORD' => '********',
];
$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];
if ($host && file_exists(__DIR__."/conf/{$host}.conf")) {
require __DIR__."/conf/{$host}.conf";
}
array_walk($defaults_conf, function($value, $name) {
defined($name) or define($name, $value);
});
unset($defaults_conf, $host);
Was oben passiert ist, dass basierend auf dem Servernamen eine andere Konfigurationsdatei geladen wird (falls gefunden) und wenn die Konfigurationsdatei keine der Standardkonfigurationskonfigurationen definiert (oder wenn die Datei nicht gefunden wird), wird standardmäßig die Konfiguration festgelegt.
Das Schöne ist, dass Sie zum Hinzufügen eines neuen Zweigs nur den Zweigordner erstellen und einen .conf
nach der neuen Zweigdomäne benannten angeben müssen. Wenn Sie fertig sind, gibt es auf der WP-Seite nichts zu ändern.
Die Linie:
$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];
Hier bekomme ich den Domainnamen. Als erste Option verwende ich eine Umgebungsvariable, da die Wahrscheinlichkeit besteht, $_SERVER['SERVER_NAME']
dass sie in einem Befehlszeilenkontext nicht funktioniert, wie z. B. bei Verwendung der WP-CLI. In diesen Situationen können Sie eine Umgebungsvariable festlegen, um WP zu zwingen, Einstellungen aus einem bestimmten Zweig zu verwenden.
Beachten Sie, dass ich in branchenspezifischen Konfigurationsdateien den WP_CONTENT_DIR
Ordner "Plugins" und "Themes" automatisch auf die zugehörigen Unterordner /plugins
und den /themes
Zweigunterordner setze.
Ein mögliches Problem hierbei ist, wenn Sie den /uploads
Ordner freigeben möchten (in den Dateien hochgeladen werden).
Standardmäßig ist dieser Ordner ein Unterordner des Inhaltsverzeichnisses. Wenn Sie also den obigen Workflow verwenden, ist er ein /uploads
Unterordner jedes Zweigstammordners.
Wenn dies für Sie kein Problem ist, gehen Sie einfach damit um. Andernfalls besteht die einfachste Lösung darin, /uploads
in jedem Zweigordner einen Symlink zu dem tatsächlichen Upload-Ordner zu erstellen, den Sie freigeben möchten.