Août 30 2009

Un autre multiblog wordpress

Publié par à 14:19 dans Informatique,wordpress

Ceci est la reprise d’un fil initialement déposé sur wordpress-fr.net.

En plus de ce blog avec pdosqlite je gère aussi un groupe de blogs avec un installation classique … enfin presque.

L’objectif est d’avoir une seule installation de wordpress pour plusieurs blog, tous dans le même domaine mais éventuellement des sous domaine différents. Ces blogs sont hébergés sur le même serveur. Chaque blog a ses propres thèmes plugin.
par exemple le premier blog est adressé par
http://machin.domaine.tld/
le second par
http://truc.domaine.tld/blog/
et wordpress http://domaine.tld/wordpress
chaque blog doit ponter sur un répertoire contenant :
un répertoire wp-content, un .htaccess, un index.hp et bien sur le wp-config.php
le .htaccess contient simplement

# BEGIN WordPress
 
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
 
# END WordPress

index.php doit juste sauvegarder le chemin du wp-config et passer la main au wordpress installé. pour cela il utilise une constante et un variable de session.

le wp-config.php est à régler « as usual » avec comme rajout après la définition de WP-LANG

define ('WPLANG', 'fr_FR'); define('WP_CONTENT_DIR',dirname(__FILE__).'/wp-content'); define('WP_CONTENT_URL','http://personne.domaine.tld/blog/wp-content'); define('WP_URL','http://domaine.tld/wordpress'); define('COOKIE_DOMAIN','.domain.tld'); /* le point devant le domaine est important */
 
/* C'est tout, ne touchez pas au reste ! Bloguez bien ! */
if ( !defined('ABSPATH') )
  //define('ABSPATH', dirname(__FILE__) . '/');   define('ABSPATH', 'path_to_wordpress/'); /*modifier pour pointer sur wordpress*/

attention pour que WP_CONTENT_DIR soit pris en compte pour les téléchargements il faut que celui-ci ne soit pas renseigné dans l’écran Réglage/Divers

dans le wordpress installé il faut récupérer les information sur le wp-config à utiliser. Il faut donc modifier wp-load.php

<?php
/**
 * Bootstrap file for setting the ABSPATH constant
 * and loading the wp-config.php file. The wp-config.php
 * file will then load the wp-settings.php file, which
 * will then set up the WordPress environment.
 *
 * If the wp-config.php file is not found then an error
 * will be displayed asking the visitor to set up the
 * wp-config.php file.
 *
 * Will also search for wp-config.php in WordPress' parent
 * directory to allow the WordPress directory to remain
 * untouched.
 *
 * @package WordPress
 */
 
/** Define ABSPATH as this files directory */
define( 'ABSPATH', dirname(__FILE__) . '/' ); 
error_reporting(E_ALL ^ E_NOTICE ^ E_USER_NOTICE); session_start(); if(isset($_SESSION['config.php']))
    require_once($_SESSION['config.php']); elseif ( file_exists( ABSPATH . 'wp-config.php') ) {
 
	/** The config file resides in ABSPATH */
	require_once( ABSPATH . 'wp-config.php' ); 
} elseif ( file_exists( dirname(ABSPATH) . '/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-load.php' ) ) {
 
	/** The config file resides one level below ABSPATH */
	require_once( dirname(ABSPATH) . '/wp-config.php' ); 
} else {
 
	// A config file doesn't exist
 
	// Set a path for the link to the installer
	if (strpos($_SERVER['PHP_SELF'], 'wp-admin') !== false) $path = ''; 	else $path = 'wp-admin/'; 
	// Die with an error message
	require_once( ABSPATH . '/wp-includes/classes.php' ); 	require_once( ABSPATH . '/wp-includes/functions.php' ); 	require_once( ABSPATH . '/wp-includes/plugin.php' ); 	wp_die(sprintf(/*WP_I18N_NO_CONFIG*/'Je ne trouve pas votre fichier <code>wp-config.php</code>. J&rsquo;en ai besoin avant de lancer l&rsquo;installation.<br />Besoin d&rsquo;aide ? <a href='http://codex.wordpress.org/fr:Installer_WordPress'>En voici</a>.</p><p>Vous pouvez créer un fichier <code>wp-config.php</code> à l&rsquo;aide de notre interface Web, mais ça ne marche pas pour toutes les configurations de serveur. La méthode la plus sûre reste de créer le fichier à la main.</p><p><a href='%ssetup-config.php' class='button'>Créer le fichier de configuration</a>'/*/WP_I18N_NO_CONFIG*/, $path), /*WP_I18N_ERROR_TITLE*/'WordPress &raquo; Erreur'/*/WP_I18N_ERROR_TITLE*/);

Comme le point d’entrée pour récupérer le bon wp-config est bien l’adresse du blog et non pas celle de wordpress il est aussi nécessaire de modifier wp-includes/cron.php et remplacer get_option(‘siteurl’) par get_option(‘home’). Il se peut que cette manip soit à répéter dans d’autres fichiers mais pour l’instant elle semble suffire. Attention à ce point certaine extensions peuvent avoir un comportement …. bizarre dans ce contexte (exemple nextgen gallery) et donc nécessiter des adaptation

//origignal :	$cron_url = get_option( 'siteurl' ) . '/wp-cron.php'; 	$cron_url = get_option( 'home' ) . '/wp-cron.php';

accédez au blog pour le créer ne pas se tromper sur l’adresse de wordpress et du blog et c’est terminé … enjoy.

ce qu’il faut retenir :
Il est assez simple de faire du multiblog avec wordpress il suffit de définir comment wp-load récupère les informations du bon wp-config. On pourrait imaginer une solution avec une seule installation de wordpress mais autant de wp-config que de blogs et une utilsation du mod rewrite.

A vous de jouer et d’inventer d’autres mode de multiblog

(pour les utilisateurs de pdo sqlite j’ai été obligé d’utiliser la version 2.6.1 avant de pouvoir sauvegarder cet article)

9 commentaires

9 commentaires pour “Un autre multiblog wordpress”

  1. Serge dit :

    Comment se fait l’administration de chaque blog étant donné qu’il n’y a qu’une seule entrée (si j’ai bien suivi) : http://domaine.tld/wordpress/wp-admin ?

    En fait, je cherche à mettre en place un système permettant d’avoir plusieurs sites sous wordpress avec une seule installation, chaque site étant géré par différentes personnes.

    serge

    • Bertrand dit :

      En fait l’administration se fait bien à condition de ne pas y rentrer directement.
      Ce qu’il faut comprendre c’est que le fichier wp-config.php contient tout ce qu’il faut pour distinguer un blog d’un autre. Lorsque l’on se connecte sur le blog le chemin vers le wp-config.php du blog est chargé dans une variable de session.
      Lors que l’on arrive sur l’administration (http://domaine.tld/wordpress/wp-admin) on récupère ce chemin et donc on sait alors dans quel blog on est.

      ça correspond au besoin exprimé mais …. il faut se méfier que le chemin vers le blog est le paramètre « home » et « siteurl » celui du moteur wordpress donc de l’administration ce qui pose souvent des problèmes avec des plugin (par exemple nextgen) qui ne connaissent que siteurl.

  2. stéphane dit :

    bonjour,

    intéressé par mu-wp, je n’ai pas réussi à l’installer sur mon espace perso sfr pour le tester. Je suis donc totalement béotien.
    Avant d’ouvrir un espace chez un autre hébergeur, je voudrais savoir si le nombre de base de données doit être égal au nombre de blogs créés ?

    merci de vos conseils
    Stéphane

    • Bertrand dit :

      pour WP-mu je joue mon joker …

      Par contre on peut installer plusieurs wordpress qui se partagent la même base de données c’est à ça que sert le préfixe de table.
      Une installation multiblog comme celle que je décris peut utiliser une ou plusieurs base.

      En fait le critère de choix pourrait être la taille de la ou les bases que l’on peut créer … le nombre de base peut être un facteur améliorant les temps de réponse et l’accessibilité (nombre de connexions simultanées à une base).
      Mais ce n’est vraiment qu’un des éléments à prendre en compte.

      Perso je suis hébergé chez 1and1 et j’ai testé des hébergements mutualisés chez nfrance (super temps de réponse bon support mais un peu trop de restrictions) et Hiwit.net (pack plume, juste un test très bon temps de réponse et peu de restrictions).

  3. ca ne marche pas sur l’hebergeur scond.fr !!

  4. Chamomor dit :

    Excellent article, merci de l’avoir pondu

  5. Chamomor dit :

    Petite question, Bertrand, si tu veux bien, et bonjour (ou bonsoir)
    Tu dis « attention pour que WP_CONTENT_DIR soit pris en compte pour les téléchargements il faut que celui-ci ne soit pas renseigné dans l’écran Réglage/Divers »
    Quelle est la configuration acceptable, dès lors ? Aucune mention ?
    Je pose la question parce que personnellement je mets toujours mon dossier pour les « uploads » dans un sous-domaine, soit un dossier à la racine. Aussi je suis bien obligée de le renseigner dans « Divers ». Tu y vois un problème ou une modification à ajouter dans ton tuto ?
    Merci d’avance

    • Bertrand dit :

      Dans mon cas il est bien à vide … si par défaut il est renseigné la valeur du WP_CONTENT_DIR est écrasée mais pour autant c’est jouable on ne bénéficie juste plus de l’automatisme du calcul de celui-ci.
      Même chose pour l’adresse des fichiers qui si elle est renseignée écrase le WP_CONTENT_URL.

      Donc pour moi il n’y a pas de problème. Je préfère garder mon doc qui n’est pas vraiment un tuto tel quel puisqu’il reflète mon installation. Pour moi ce doc est une ouverture, je ne décris pas la solution. Juste une pour gérer des cas tordus.
      On peut très bien travailler avec un catchall (tout les sous domaines pointent vers le même endroit) et calculer les valeurs du wp-config.php d’après le sous domaine appelant. C’est assez simple à faire. Et dans ce cas il n’y a pas de modifications nécessaires à wordpress.

Poster une réponse


Hébergement 1&1 Dual essentiel 68 requêtes en 0,096 secondes.