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 /confna tym samym poziomie wp-config.phppliku i /WordPressfolderu.
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.phpmoż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ć .confnazwę 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_DIRi, który automatycznie ustawi folder wtyczek i motywów na powiązane /pluginsi /themespodfoldery gałęzi.
Możliwym problemem jest tutaj, jeśli chcesz udostępnić /uploadsfolder (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 /uploadspodfolderem 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 /uploadsw każdym folderze oddziału dowiązania symbolicznego do prawdziwego folderu przesyłania, który chcesz udostępnić.