Séparer son site et son weblog propulsé par WordPress
Le but de cet article est de permettre l’utilisation de WordPress comme un gestionnaire de contenu faisant apparaitre un site classique et un blog de manière distincte.
Avec cette solution l’arborescence des pages WordPress sont visibles à la racine du site alors que les articles du blog apparaisse dans un dossier nommé blog.
Pour donner au weblog son propre répertoire dans l’arborescence des pages, il faut d’abord modifier les permaliens pour que les articles soient publiées dans un sous-répertoire en changeant la structure pour faire apparaitre un sous répertoire blog par exemple. La structure des permaliens devrait ressembler à ceci : /blog/%year%/%monthnum%/%day%/%postname%.
Ensuite vous pourrez remarquer que si vous allez à l’adresse http://www.votresite.com/blog une erreur 404 va apparaitre. C’est parce que WordPress n’interprète pas ce répertoire comme l’accueil du weblog. Pour cela il faut ajouter une règle de redirection pour ce répertoire en utilisant le filtre rewrite_rules_array
qui permet d’ajouter des règles de redirections. Nous allons donc utiliser les point d’entrés fournis par WordPress pour les plugins.
Dans un thème WordPress la page d’accueil du weblog utilise le gabarit home.php
si celui-ci existe, sinon c’est le fichier index.php
qui est utilisé. Nous allons ajouter une règle permettant à WordPress d’afficher un autre gabarit quand nous sommes sur l’accueil du site et de rediriger vers le gabarit de l’accueil classique du blog lorsque nous sommes dans notre répertoire /blog/.
Pour cela il faut ajouter un fichier functions.php
dans le thème, si celui-ci n’existe pas déjà. Ainsi notre modification sera active pour notre thème uniquement et ne sera pas dépendante de l’activation ou non d’un plugin. Cela évite les mauvaises manipulations et de voir notre mise en page totalement désordonnées en cas de désactivation du plugin ou de changement de thème.
Il va falloir mettre en place 2 fonctions pour gérer cette fonctionnalité :
- la première (
add_rules
) va permettre à WordPress de
reconnaitre notre dossier /blog/ en l’assimilant à l’accueil de
la partie weblog - la seconde (
template_redirect
) va permettre à WordPress
d’utiliser le fichierhomepage.php
comme gabarit de la
racine de notre site.
Pour éviter que nos fonctions entrent en collision avec celles de WordPress, celles-ci seront encapsulées dans une classe. De la même manière que je le préconise pour les plugins.
function add_rules($rules) {
// Récupération des informations de redirections d'adresse
global $wp_rewrite;
// Génération des liens pour les commentaires, pagination, etc.
$new_rules = $wp_rewrite->generate_rewrite_rules($wp_rewrite->front);
// Génértation de la règle de redirection principale
$global_home_rule = substr($wp_rewrite->front,1).'?';
$new_rules[$global_home_rule] = "index.php";
// ajout des nouvelles règles de redirection
$rules += $new_rules;
return $rules;
}
function redirect() {
//Récupération du contexte
global $wp;
// S'il s'agit de l'accueil et de la racine du site charger le gabarit homepage.php
if(is_home() and ($wp->matched_rule == '')) {
if(file_exists(dirname(__FILE__).'/homepage.php')) {
include(dirname(__FILE__).'/homepage.php');
} else {
include(get_query_template('homepage'));
}
// La page est affichée on sort
exit;
}
}