Comme l'a dit @ tom-j-nowell dans un commentaire à OP, le multisite peut faciliter cela.
Les performances et la sécurité ne sont pas vraiment un problème pour le multisite (du moins pas plus que pour les installations régulières), mais je suis d'accord que le multisite peut parfois être un problème, car de nombreux plugins (personnalisés ou tiers) peuvent ne pas fonctionner correctement sur plusieurs sites, ou peut-être parce que vous souhaitez garder les utilisateurs de différents sites Web complètement séparés.
Cela dit, ce que vous voulez réaliser n'est pas si difficile.
Ce que vous devez changer entre l'installation est:
- dossier plugins
- dossier de thèmes
- paramètres de la base de données
Ces configurations peuvent être faites en utilisant des constantes danswp-config.php
votre seul problème est de savoir comment les changer en fonction de l'URL.
La variable serveur 'SERVER_NAME'
devrait fonctionner pour vous, au moins si votre serveur Web est correctement configuré.
Par exemple, vous pouvez créer un dossier nommé /conf
au même niveau de wp-config.php
fichier et de /WordPress
dossier.
Dans ce dossier, vous pouvez ajouter des fichiers:
branch1.domain.com.conf
branch2.domain.com.conf
branch3.domain.com.conf
à l'intérieur de chacun d'eux, vous pouvez faire quelque chose comme
$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 );
Cela changera sur chaque fichier de configuration en fonction de la "branche".
Après cela, dans votre unique, wp-config.php
vous pouvez donc quelque chose comme:
$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);
Ce qui se passe ci-dessus est que, sur la base du nom du serveur, vous chargez un fichier de configuration différent (s'il est trouvé) et si le fichier de configuration ne définit aucune configuration par défaut (ou si le fichier n'est pas trouvé), la configuration est définie par défaut.
Une bonne chose est que pour ajouter une nouvelle branche, il vous suffit de créer le dossier de la branche et de fournir un .conf
nom d'après le nouveau domaine de la branche, et vous avez terminé, il n'y a rien à changer du côté de WP.
La ligne:
$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];
c'est là que j'obtiens le nom de domaine. Comme première option, j'utilise une variable d'environnement, car il y a des chances que $_SERVER['SERVER_NAME']
cela ne fonctionne pas sur un contexte de ligne de commande, comme nous lors de l'utilisation de WP CLI. Dans ces situations, vous pouvez définir une variable d'environnement pour forcer WP à utiliser les paramètres d'une branche spécifique.
Notez que dans les fichiers de configuration spécifiques à une branche, je modifie le WP_CONTENT_DIR
et qui définira automatiquement le dossier plugins et thèmes dans les sous-dossiers liés /plugins
et de /themes
branche.
Un problème possible ici est si vous souhaitez partager le /uploads
dossier (où les fichiers sont téléchargés).
Par défaut, ce dossier est un sous-dossier du répertoire de contenu, donc en utilisant le flux de travail ci-dessus, ce sera un /uploads
sous-dossier de chaque dossier racine de branche.
Si ce n'est pas un problème pour vous, allez-y, sinon la solution la plus simple serait de créer /uploads
dans chaque dossier de branche un lien symbolique vers le vrai dossier de téléchargement que vous souhaitez partager.