WordPress : plusieurs blogs sur une seule installation

Publié le 03 septembre 2009 par Paul

Lorsque vous avez un blog et que vous jouez un peu avec, il vous prendra rapidement l’idée d’en avoir plusieurs Un blog perso, un blog pro, et peut être même un blog « de test », et le tout probablement sur plusieurs domaines. Quand il s’agit de mettre à jour tous ces blogs (toutes vos installations de Wordpress), cela demande tout de suite beaucoup de travail et donc de temps Il serait tout de suite beaucoup plus facile de réaliser ces opérations de maintenance, si vous n’aviez qu’une seule et même installation de WordPress mais plusieurs bases de données connectées à cette même installation Voici donc comment avoir un WordPress multi-utilisateurs, ou plutôt multi-domaines si vous préférez. Cela n’est pas difficile à mettre en place, il suffit de suivre le guide : ACTION!

Choisir plusieurs domaines ou sous-domaines…

Nous allons donc avoir une seule installation de WordPress qui va supporter plusieurs domaines ou plusieurs sous-domaines. Il serait également possible de mixer les deux mais ne compliquons pas. Pour l’instant nous supposons que votre installation va supporter (ou accueillir) les domaines : www.domain1.com et www.domain2.com.

Installer WordPress (facultatif)

Vous installez une seule fois WordPress comme vous le feriez classiquement pour un seul site/domaine. Il s’agit bien sûr de l’installation qui va accueillir vos différents domaines. Cette opération est facultative puisque la modification suivante peut tout à fait être effectuée sur une installation existante.

Créer les autres bases de données

Comme vous avez un WordPress d’installé, vous avez déjà une base de données. Il va vous falloir autant d’autres bases de données que de noms de domaines supplémentaires. WordPress a besoin de vous pour créer une base de données vide. Si vous pointez sur un domaine dont la base n’est pas encore créé, WordPress va vous en informer et vous demander de sélectionner une base de données. Lorsque la base (vide) est trouvée, vous aurez l’écran de configuration.

Modifier le fichier « wp-config.php », ici la magie s’opère !

Dans le fichier de configuration wp-config.php on va déterminer quel domaine « appelle » l’installation et utiliser telle ou telle base de données en conséquence.

[Copy to clipboard]View Code PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php $host = $_SERVER['HTTP_HOST'];
$parts = explode('.',$host);
if ($parts[3] = "") {
    $domain = $parts[0];
} else {
    $domain = $parts[1];
}
switch ($domain) {
case "domaine1":
    $db = "database1";
    break;
case "domaine2":
    $db = "database2";
    break;
}
define('DB_NAME', $db);
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
define('DB_HOST', 'hostname'); ?>

Il faut bien sûr remplacer domaine1 et domaine2 par vos domaines et database1 et database2 par les bases de données qui doivent être respectivement utilisées.

Nous supposons ici que toutes vos bases se trouvent sur le même serveur de bases de données (’DB_HOST’) et que le même utilisateur (’DB_USER’ et ‘DB_PASSWORD’) a les privilèges nécessaires sur ces mêmes bases. Si tel n’est pas le cas, libre à vous de modifier le script à votre guise. Par exemple :

[Copy to clipboard]View Code PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php $host = $_SERVER['HTTP_HOST'];
$parts = explode('.',$host);
if ($parts[3] = "") {
    $domain = $parts[0];
} else {
    $domain = $parts[1];
}
switch ($domain) {
case "domaine1":
    $db = "database1";
    $user = "user1";
    $password = "password1";
    $hostname = "hostname1";
    break;
case "domaine2":
    $db = "database2";
    $user = "user2";
    $password = "password2";
    $hostname = "hostname2";
    break;
}
define('DB_NAME', $db);
define('DB_USER', $user);
define('DB_PASSWORD', $password);
define('DB_HOST', $hostname); ?>

Pour finir…

Pour être sûr que rien ne se mélange, vous devez effectuer une dernière modification dans le panneau d’administration de chaque domaine. Rendez-vous dans « Réglages » ( »Options » en anglais) -> « Divers » ( »Miscellaneous » en anglais) et changer le contenu du champ « Stocker les fichiers envoyés dans ce dossier » par wp-content/uploads/domaine. Remplacez bien sûr « domaine » par le nom de domaine correspondant. Cette modification évite que tous les fichiers que vous allez envoyer (uploader) ne soient stockés dans le même répertoire (uploads) alors qu’ils proviennent finalement de « différents blogs ».

Informations complémentaires…

Cette méthode vaut ce qu’elle vaut mais elle a quand même le mérite d’exister. Il existe cependant d’autres méthodes plus ou moins performantes (souvent moins) et plus ou moins complexes (souvent plus). Disons que vous avez sous les yeux une méthode que j’ai testé, qui est « light » et relativement accessible. Au delà de ça il est toujours possible d’imaginer X autres solutions. On pourrait par exemple tout stocker dans une base de données mais ne compliquons pas les choses, il s’agit d’un tuto ! Quoiqu’il en soit, si ces autres méthodes vous intéressent, je propose aussi de lire Host multiple WP sites on one installation de LobsterMan et How to: multiple blogs, one Wordpress installation de Martijn Stegink. Si vous souhaitez comprendre un peu ce que font ces lignes de code, la documentation PHP pourrait également vous être utile.

Comme d’habitude, si vous avez besoin d’aide, des questions, des remarques, des suggestions ou juste envie de vous suicider, le système de commentaires est fait pour ça