Como @ tom-j-nowell disse em comentário à OP, o multisite pode facilitar isso.
O desempenho e a segurança não são realmente um problema para multisite (pelo menos, não mais do que para instalações regulares), mas concordo que o multisite às vezes pode ser um problema, porque muitos plugins (personalizados ou de terceiros) podem não funcione corretamente em vários sites ou talvez porque você queira manter os usuários de sites diferentes completamente separados.
Dito isto, o que você deseja alcançar não é tão difícil.
O que você precisa alterar entre a instalação é:
- pasta de plugins
- pasta de temas
- configurações de banco de dados
Essas configurações podem ser feitas usando constantes nowp-config.php seu único problema é como alterná-las com base no URL.
A variável do servidor 'SERVER_NAME'deve funcionar para você, pelo menos se o seu servidor da web estiver configurado corretamente.
Por exemplo, você pode criar uma pasta nomeada /confno mesmo nível de wp-config.phparquivo e /WordPresspasta.
Nessa pasta, você pode adicionar alguns arquivos:
branch1.domain.com.conf
branch2.domain.com.conf
branch3.domain.com.conf
dentro de cada um deles você pode fazer algo como
$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 );
Isso será alterado em cada arquivo de configuração, de acordo com o "ramo".
Depois disso, no seu exclusivo, wp-config.phpvocê pode criar algo como:
$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);
O que aconteceu acima é que, com base no nome do servidor, você carrega um arquivo de configuração diferente (se encontrado) e se o arquivo de configuração não define nenhuma das configurações padrão (ou se o arquivo não for encontrado) é definido por padrão.
O bom é que, para adicionar uma nova ramificação, você só precisa criar a pasta da ramificação e fornecer um .confnome após o novo domínio da ramificação, e pronto, não há nada para mudar no lado do WP.
A linha:
$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];
é onde eu recebo o nome de domínio. Como primeira opção, estou usando uma variável de ambiente, porque há chances de $_SERVER['SERVER_NAME']que não funcionem em um contexto de linha de comando, como nós ao usar o WP CLI. Nessas situações, você pode definir uma variável de ambiente para forçar o WP a usar configurações de uma ramificação específica.
Observe que, nos arquivos de configuração específicos da ramificação, estou alterando a WP_CONTENT_DIRpasta e que definirá automaticamente a pasta plugins e temas para as subpastas relacionadas /pluginse /themesramificadas.
Um possível problema aqui é se você deseja compartilhar a /uploadspasta (onde os arquivos são enviados).
Por padrão, essa pasta é uma subpasta do diretório de conteúdo, portanto, usando o fluxo de trabalho acima, haverá uma /uploadssubpasta de cada pasta raiz da ramificação.
Se isso não é um problema para você, basta seguir com ele; caso contrário, a solução mais fácil seria tornar /uploadsem cada pasta de ramificação um link simbólico para a pasta de envios real que você deseja compartilhar.