Jak powiedział @ tom-j-nowell w komentarzu do OP, multisite może to ułatwić.
Wydajność i bezpieczeństwo nie są tak naprawdę problemem dla wielu witryn (przynajmniej nie więcej niż dla zwykłych instalacji), ale zgadzam się, że wiele witryn może czasami stanowić problem, ponieważ wiele wtyczek (niestandardowych lub zewnętrznych) może nie działa poprawnie na wielu witrynach, a może dlatego, że chcesz całkowicie oddzielić użytkowników różnych witryn.
To powiedziawszy, co chcesz osiągnąć, nie jest takie trudne.
To, co musisz zmienić między instalacjami, to:
- folder wtyczek
- folder motywów
- ustawienia bazy danych
Tych konfiguracji można dokonać za pomocą stałych.wp-config.php
Jedynym problemem jest przełączanie ich na podstawie adresu URL.
Zmienna serwera 'SERVER_NAME'
powinna działać dla Ciebie, przynajmniej jeśli Twój serwer WWW jest poprawnie skonfigurowany.
Na przykład możesz utworzyć folder o nazwie /conf
na tym samym poziomie wp-config.php
pliku i /WordPress
folderu.
W tym folderze możesz dodać niektóre pliki:
branch1.domain.com.conf
branch2.domain.com.conf
branch3.domain.com.conf
w każdym z nich możesz zrobić coś takiego
$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 );
To zmieni się w każdym pliku konfiguracyjnym zgodnie z „oddziałem”.
Następnie w swoim unikatowym narzędziu wp-config.php
możesz zrobić coś takiego:
$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);
To, co dzieje się powyżej, polega na tym, że na podstawie nazwy serwera ładujesz inny plik konfiguracyjny (jeśli został znaleziony) i jeśli plik konfiguracyjny nie definiuje żadnej z konfiguracji domyślnej (lub jeśli plik nie został znaleziony) konfiguracja jest ustawiana domyślnie.
Fajną rzeczą jest to, że aby dodać nową gałąź, wystarczy utworzyć folder gałęzi i podać .conf
nazwę po nowej domenie gałęzi, i gotowe - nie ma nic do zmiany po stronie WP.
Linia:
$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];
to gdzie dostaję nazwę domeny. Jako pierwszą opcję używam zmiennej środowiskowej, ponieważ są szanse, $_SERVER['SERVER_NAME']
że nie będą działać w kontekście wiersza poleceń, np. Podczas korzystania z WP CLI. W takich sytuacjach można ustawić zmienną środowiskową, aby zmusić WP do korzystania z ustawień z określonej gałęzi.
Zauważ, że w plikach konfiguracyjnych specyficznych dla gałęzi zmieniam WP_CONTENT_DIR
i, który automatycznie ustawi folder wtyczek i motywów na powiązane /plugins
i /themes
podfoldery gałęzi.
Możliwym problemem jest tutaj, jeśli chcesz udostępnić /uploads
folder (gdzie pliki są przesyłane).
Domyślnie ten folder jest podfolderem zawartości katalogu, więc przy użyciu powyższego przepływu pracy będzie on /uploads
podfolderem każdego folderu głównego oddziału.
Jeśli nie jest to dla ciebie problemem, po prostu idź z nim, w przeciwnym razie najłatwiejszym rozwiązaniem byłoby uczynienie /uploads
w każdym folderze oddziału dowiązania symbolicznego do prawdziwego folderu przesyłania, który chcesz udostępnić.