Wordpress : afficher une page contenant les posts d'une seule catégorie

Autrement dit…

comment diviser son blog Wordpress en 2 parties (ou plus)

Ce petit tutoriel a pour but d'expliquer simplement et rapidement comment avoir deux pages actives dans Wordpress, la première étant la page d'accueil normale affichant l'ensemble des posts, la deuxième étant celle n'affichant que les posts d'une certaine catégorie.

Le fonctionnement global de Wordpress n'étant donc pas le sujet de cet article, nous nous focaliserons sur le sujet abordé. De la même façon, nous partons du principe que vous savez manipuler, même basiquement, des outils tels que le FTP ou la console d'accès de votre hébergeur ainsi que sa partie PhpMyAdmin.

Aboslument rien de sorcier ici, bien au contraire, mais quelques manipulations à effectuer avec soin.

Idée générale

La technique est de filtrer ce qu'affiche Wordpress sur la page d'accueil en enlevant une catégorie… cette même catégorie qui sera la seule affichée sur l'autre page.

Les catégories

Si vous avez déjà organisé vos articles avec des catégories, alors peut-être savez-vous déjà lesquelles vous allez utiliser. Il vous suffit de noter leurs noms courts, nous en aurons besoin.

Dans l'autre cas, créez une nouvelle catégorie, par exemple dans mon cas “Alternative”, puis vous allez attribuer cette catégorie à tous les posts concernés (donc ceux destinés à la deuxième page).

Consulter votre base de données

Il nous faut maintenant trouver quels sont les identifiants de la ou des catégories que vous avez choisi.

J'utiliserai comme exemple la catégorie “Alternative” créée auparavant.

Rendez-vous donc sur la console d'administration de votre hébergeur. Accédez à l'espace de gestion des bases de données (souvent nommé MySQL). Dans mons cas, avec 1and1, il faut aller dans la rubrique Webspace->Administration de MySQL puis à droite de la ligne affichant le nom de la base associée à Wordpress il y a un bouton “phpMyAdmin”.

La table concernée est wp_terms.

Cliquez dessus, puis affichez le contenu des champs term id : vous obtenez la liste de vos catégories, avec affichés leurs identifiants.

Notez bien l'identifiant de la ou les catégories concernées. Dans mon cas, en face de “alternative”, l'ID était 58.

C'est tout pour la partie BDD.

Modification de votre fichier index.php

Ouvrez votre logiciel FTP et connectez-vous à votre serveur, puis entrez dans le dossier de votre blog, c'est-à-dire dans le dossier ou est installé Wordpress.

Il faut ensuite se rendre dans le dossier de votre thème. Comme j'utilise Path, dans mon cas c'était : wp-content/themes/path/.

Téléchargez le fichier index.php pour en faire une copie de sauvegarde.

Editez le fichier sur votre serveur (si vous ne savez pas ou ne pouvez pas, éditez simplement la sauvegarde puis reversez-là dans le dossier du serveur) pour ajouter une ligne.

On va se placer au début de la boucle, juste avant la ligne contenant :

if(have_posts())

et ajouter la ligne suivante :

<?php query_posts($query_string . '&cat=-58'); ?>

Cette ligne signifie “ne pas afficher les posts de la catégorie 58”.

Évidemment vous devez remplacer 58 par l'identifiant de votre catégorie. Si vous souhaitez déclarer plusieurs identifiants, séparez-les simplement par une virgule.

Ajout de la nouvelle page

Maintenant ouvrez la copie de sauvegarde du fichier index.php, c'est-à-dire la version normale avant que nous ne rajoutions la ligne qui exclut la catégorie.

Ajoutez ce “tag” au tout début du fichier :

<?php /* Template Name: Alternative */ ?>

Enregistrez le fichier localement sous le nom de alternative.php (très important : le nom du template dans le tag doit être le même que celui du fichier) et versez-le dans votre dossier sur le serveur (au même niveau que le fichier index.php, donc).

Si c'est également votre cas, il faut effacer les lignes suivantes dans le fichier alternative.php :

<?php if(have_posts()) : ?>
<?php else : ?>
    <h2>404</h2>
<?php endif; ?>

Attention à ne pas vous tromper avec les identations php pas forcément faciles à lire. L'idée est simple : on enlève la condition, son else et sa fin, pour ne laisser que ce qu'elle contenait en cas de succès du test.

Maintenant l'essentiel : on veut que cette nouvelle page n'affiche que la catégorie que l'on n'affiche plus dans l'autre.

Donc on rajoute dans alternative.php la ligne suivante :

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    query_posts("category_name=alternative&paged=$paged");
?>

juste avant

while(have_posts())

Évidemment il vous faut remplacer la variable category_name=alternative par votre propre catégorie.

Si vous avez une page blache ou une erreur, il est possible que vous deviez rajouter ce code au début de la nouvelle page :

<?php
    define('WP_USE_THEMES', false);
    require('./wp-load.php');
?>

C'est necessaire dans le cas d'une install WordPress ancienne ou d'une configuration particulière du thème.

Déclarer la page dans Wordpress

Allez dans l'interface d'adminsitration et créez une nouvelle page vide.

Choisissez un titre qui corresponde à la catégorie, dans mon cas j'ai simplement mis “Alternative”.

Le corps de la page doit rester vide, puisque c'est un modèle. Il faut d'ailleurs aller dans le panneau d'attribut de la page (une boîte dans la barre verticale à droite) et choisir dans le menu déroulant le template que nous avons créé. Dans mon cas : “Alternative”.

Publiez la page, et voilà !

Selon votre thème, il sera peut-être necessaire d'aller dans la rubrique “Apparence”->“Widgets” et d'afficher un menu des pages dans la sidebar, ou de rajouter un menu pour votre blog, bref, pour afficher la page principale et son alternative.

C'est fini

Sans modifier ni créer de base de données ou d'utilisateur de la base, sans doubler la taille du répertoire, sans aucune manipulation ‘extrême’, nous avons, dans un seul blog, deux parties distinctes et qui s'excluent l'une l'autre.

Vous rédigez vos articles habituels et ils sont affichés dans la page habituelle ; vous rédigez un article destiné à la page alternative en lui associant simplement la catégorie “alternative”.

Amusez-vous bien !

Auteur: Eric Dejonckheere