WordPress : plusieurs blogs sur une seule installation

Lorsque vous avez un blog et que vous jouez un peu avec, il vous prendra rapidement l’idée d’en avoir plusieurs cyp 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.

<?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 :

<?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 😛

11 réponses sur “WordPress : plusieurs blogs sur une seule installation”

  1. pourquoi ne pas utiliser WordPress Mu ? 😀 C’est bien plus simple pour déployer les blogs en quelques clics et surtout la technique décrite ci-dessous risque de compliquer la vie de certains plugins ^^

    1. Remarque très pertinente ! 🙄 En premier lieu je n’ai pas une grande connaissance de MU, je l’ai installé une fois « just for fun » ❓ La déclinaison « MU » étant arrivée bien plus tard, J’utilisais donc cette méthode bien avant sa sortie 😎 D’autre part, j’estime que cette méthode conserve tout son intérêt étant donné que, comme le souligne @al, il ne me semble pas que MU gère nativement les multi-domaines : il gère le multi-sous-domaines mais pas le multi-domaines (information à vérifier). Sinon je précise que lors du WordCamp de San Francisco, Matt Mullenweg (lead developer) a annoncé que la version .org, “standalone” de WordPress et celle de WordPress MU allaient prochainement fusionner et ne faire plus qu’une seule et même version ! Entre temps, le billet de Lorelle VanFossen sur The Blog Herald avait semé le trouble, mais Matt est venu confirmer cette fusion. De plus, Jeffro a eu confirmation auprès de Donncha (contributing developer) :

      « donncha – Sure, MU will be merged into WP. That’s basically the whole story
      jeffr0 – Majority of people believe a merging of the two projects. WordPress and WordPress MU into one project with a rumored completion of WordPress 3.0. Now posts like Lorelle’s on the blogherald are creeping up suggesting no, WordPress.org will be powered by WordPress MU or something like that. No one knows anything
      donncha – It’s just MU -> WP. Everything else is speculation.
      jeffr0 – So WPMU becomes WP and that’s that?
      donncha – basically, yes. »

  2. Salut,

    je suis l’heureux propiétaire de 3 blogs WordPress : tunerdebrest.fr, on-lit-trop.fr et dimensionados.fr. Un quatrième est en cours et je suis donc fortement interessé par ce tuto. J’ai une question par rapport au wp-config. Mon site principal est tunerdebrest.fr et dans mon wp-config j’ai la ligne :

    « define( ‘DOMAIN_CURRENT_SITE’, ‘www.tunerdebrest.fr’ ); »

    Dois-je modifier cette ligne?

    Sinon, je suis également interessé par le tuto permettant de tout stocker dans une seule base de données (Chez OVH désormais ça coûte cher une BDD !!!). Donc compliquons les choses.

    Déjà merci pour ce tuto et merci d’avance pour votre réponse.

    Dom

  3. très bon idée mais voila pour moi je cherche a crée deux site avec deux nom différent mais avec le même contenu , et que la publication d’article ce fasse sur site1 et que les article soit afficher sur site1 et site2

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *