Cheatsheet

4 façons d'avoir plusieurs pages de blog

Laisser un commentaire

Comme tout outil, WordPress a ses limites : il ne permet pas d’avoir plus d’une page de blog (comprendre page qui liste les articles ou posts).

Cette limitation est inhérente à l’architecture originelle de WordPress, qui n’est à la base qu’un simple moteur de blog. Mais nous l’avons dit, notre cher WordPress est aujourd’hui un vrai CMS et ses différents usages nécessitent de la souplesse. Voici donc quatre manières d’afficher plusieurs pages d’articles.

De la plus à l’arrache à la plus aboutie, ces différentes techniques ont chacune leurs particularités. Trois d’entre elles se différencient nettement par leur approche au niveau de la base de données, la première, qui est la plus facile à mettre en place, ne nécessite même pas de mettre les mains dans le cambouis (au détriment peut-être d’une certaine flexibilité).

Utilisation des catégories comme pages de blog

Cette technique est d’une simplicité incroyable mais elle reste extrêmement efficace. C’est la seule manière d’obtenir l’effet souhaité sans toucher au code.

Résumons la situation. Vous avez un blog et vous écrivez des articles dans différentes catégories. Vous voulez par exemple avoir une page avec vos articles techniques sur la programmation et une autre avec les articles qui traitent de l’actualité.

Autre cas, vous avez un e-commerce et vous avez plusieurs gammes de produits. Chaque produit correspond à un post et vous souhaitez qu’une page regroupe les tondeuses 2 temps tandis qu’une autre n’affiche que les tondeuses 4 temps.

Dans le menu de WordPress, il vous suffit de vous rendre dans Apparence > menus, puis d’ajouter à votre menu la catégorie 2 temps et la catégorie 4 temps (si votre thème le supporte).

Vous n’avez plus qu’à cocher les catégories correspondantes dans vos articles pour qu’ils se “rangent” automatiquement sur la bonne page !

La limite de cette technique est que votre page de blog principale affiche toujours l’ensemble de vos articles. Vous pouvez mettre une page statique en page d’accueil (ça se fait dans Réglages > lecture) et ne pas attribuer de page spécifique à votre page de blogs qui contient tous les articles. Virtuellement, elle sera inexistante.

Cette solution convient tout à fait pour une entreprise qui présente sa philosophie, son expertise ou son domaine d’activité en homepage par exemple. Mais il y a de nombreux cas où la page d’accueil doit être la page qui liste les articles : imaginez un magazine en ligne ou la page d’accueil ne regroupe pas les derniers articles parus ?! Dans ces cas là, il va falloir ouvrir votre éditeur de code !

Deux pages (ou plus) de blogs sur mesure

C’est une technique que j’utilise assez souvent. Vous n’avez qu’une seule interface d’administration, une seule base de données et vous n’ajoutez aucune table. Vous allez créer une ou plusieurs catégories et dire en quelque sorte à WordPress que pour ces catégories, vous voulez qu’il les affiche sur une autre page que celle de blog “normale”. Commençons !

Filtrons les catégories sur la homepage

Puisque certaines catégories seront affichées sur une page à part, il serait pas mal qu’elles ne s’affichent pas aussi sur la page de blog “normale”, non ? Pour ce faire, il va falloir ajouter un petit bout de code sur la page index.php de votre thème.

Pas d’empressement cependant ! Il va déjà falloir créer les catégories en question… Créez donc vos catégories puis déterminez-en les ID. Vous pouvez les trouver dans les url lorsque vous cliquez sur le nom d’une catégorie (…tag_ID=xx).

Cette fois vous pouvez ouvrir index.php. Ajoutez-y donc la ligne suivante – avant le début de la loop, soit le if(have_posts()) : – pour que cette catégorie ne s’affiche plus sur la page :

// Remplacez xx par votre id de catégorie
<?php query_posts($query_string . '&cat=-xx'); ?>

Au cas où vous voudriez exclure plusieurs catégories – admettons la catégorie ayant pour ID 8 en plus de la 6 – mettez une virgule puis -8. Comme ceci les amis :

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

Toi comprendre ? Bien, poursuivons !

Créons un template de page

Dans l’état actuel des choses, votre page de blog “index” n’affiche déjà plus les articles dont vous avez sélectionné les ID. Vous allez maintenant devoir créer un template pour votre nouvelle page de blog.

Créez donc un fichier, par exemple categorie-perso.php, et copiez-y tout le contenu du fichier index.php de votre thème. Attention, lorsque je dis tout le index.php, je parle du index.php avant modification, c’est à dire sans query_posts($query_string . '&cat=-xx');.

En effet, cette ligne signifie :

n’affiche pas le ou les articles dont je te donne le/les id de la/les catégories

Or c’est justement sur cette page que l’on voudra afficher ces articles, pensez donc à effacer cette ligne ! Il faut aussi ajouter un tag en haut du fichier PHP pour que WordPress comprenne qu’il s’agit d’un template. Rajoutez ce tag au début du fichier.

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

Enregistrez ce fichier et placez-le dans le répertoire de votre thème. Dirigez-vous maintenant dans votre interface d’administration, créez une nouvelle page, puis dans le panneau attribut de la page, choisissez le modèle de template que vous venez de créer.

Chaque thème est différent

Tout dépend de la manière dont est fait votre thème. J’avais dans mon thème une gestion du cas où la loop ne trouve pas de contenu. C’est à dire qu’avant le <?php while(have_posts()) : the_post(); ?> ; il y avais une condition qui venait vérifier qu’il y ait bien des posts à afficher.

<?php if (have_posts()) : ?>

Et après la fermeture de ma loop, qui correspond à :

<?php endwhile; ?>

J’avais ma condition qui venait afficher un message d’erreur plus le formulaire de recherche (seulement au cas où il n’y ait aucun article à afficher), comme ceci :

<?php else : ?>
<h2>Oooopppsss...</h2>
<p>Désolé, mais vous cherchez quelque chose qui ne se trouve pas ici .</p>
<?php include (TEMPLATEPATH . '/searchform.php'); ?>
<?php endif; ?>

Tout ce petit monde provoquait des erreurs. J’ai donc viré la ligne du if have posts ainsi que le else suivant la fin de la boucle (ça correspond au deuxième et au dernier des quatre blocs de code ci-dessus).

Enlever cette gestion d’erreurs n’a aucun impact puisqu’on arrive à cette page en général à cause d’une mauvaise url où d’une recherche qui ne correspond à aucun contenu. Dans tous les cas, le index.php du thème s’en chargera.

Let the magic happen

Si vous vous rendez sur la nouvelle page créée, vous avez tous les articles, même ceux maintenant disparus de votre home. C’est que tout va bien.

Quoi qu’il en soit, avoir absolument tous nos articles sur cette page n’est vraiment pas le résultat voulu. On va donc dire à WordPress de n’afficher que les articles d’une catégorie donnée sur cette page. Pour cela, il faut lui adjoindre un autre morceau de code, que vous placerez juste avant la ligne du while (have_posts()) :, de la manière suivante :

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts('category_name=ma-super-categorie&paged=$paged');
?>

// La ligne suivante, vous l'avez déjà, ne la mettez donc pas deux fois,
// il s'agit juste de placer le morceau ci-dessus avant la ligne qui suit
<?php while(have_posts()) : the_post(); ?>

Deux bases de données

Les deux techniques suivantes sont selon moi moins flexibles. Elles fonctionnent tout à fait et seront certainement adaptées à des situations précises mais me paraissent un peu moins propres dans leur logique.

Quoi qu’il en soit, la logique appliquée à ces deux approches est souvent utilisée pour offrir un espace de blog aux boutiques en lignes. Bien souvent les e-commerce reposent sur des CMS spécialisé (Prestashop ou Magento pa exemple) mais ces CMS sont justement assez mauvais dans la gestion de contenu éditorial.

Alors pour tricher, un WordPress est souvent mis en place avec la même charte graphique que le site de e-commerce, on place les bons liens dans le menu de l’un et de l’autre et voilà.

C’est un peu la méthode à la wanéguen ! Mais elle est parfaitement fonctionnelle et offre l’avantage (ou l’inconvénient) de totalement séparer les bases de données de chacune de vos pages de blog.

En réalité, vous aurez avec cette technique deux blogs distincts, donc deux interfaces d’administration (avantage ou inconvénient encore une fois, c’est selon les utilisations), mais d’un point de vue cosmétique, de design, vos visiteurs croiront que vous n’avez qu’un seul site. Cependant, si vous préférez n’avoir qu’une seule base et une seule interface d’administration, passez directement à la troisième approche.

Configurons le blog

Admettons que vous ayez déjà un blog sous WordPress sur votre hébergement, à l’adresse www.mon-blog.fr. Vous voulez ajouter une page de blog “life”. Pour cela, ajoutez un répertoire au dossier contenant votre site WordPress (à côté de wp-admin, wp-content etc). Ensuite, copiez-y tous les fichiers et dossiers de votre WordPress déjà existant.

arborescence hebergement WordPress

Une fois la copie terminée, supprimez le fichier wp-config ( /!\ celui contenu dans life, pas celui de votre site normal). Vous pouvez aussi supprimer les fichiers contenus dans /wp-content/uploads. Une fois ceci fait, accédez à ce nouveau site (il est disponible à l’url www.mon-blog.fr/life). WordPress va vous demander de le configurer comme un nouveau site. Fournissez lui donc toutes les infos qu’il demande au niveau de la base de données.

Adaptons le template

Une fois l’installation terminée, appliquez à ce nouveau site le même thème que votre site principal. Mis à part le contenu, les deux sont maintenant identiques. Il serait néanmoins quand même sympa d’avoir un onglet dans le menu de navigation pour pouvoir naviguer directement entre vos deux site. Il va pour cela falloir modifier un peu votre thème pour configurer le menu.

Avant de se plonger dans le code, si votre thème le supporte, vous pouvez faire cela directement depuis l’interface d’administration. Allez donc dans Apparence > menus, puis cliquez sur l’onglet lien. Vous pouvez ici ajouter un élément de menu pour le faire pointer vers le lien de votre choix (en l’occurrence l’adresse de votre second site).

Si par malchance, votre thème ne supporte pas cette fonctionnalité, vous allez devoir remonter vos manches. Dans le cas où vous n’avez pas de menu, il suffira de l’écrire en dur dans le header de votre thème :

<ul>
    <li><a href="http://www.mon-blog.fr">Home</a></li>
    <li><a href="/life">Life</a></li>
</ul>

“Home” étant ici votre page de d’accueil et “life” amène à votre “second site” maintenant intégré comme si les deux ne faisaient plus qu’un. Cependant, il est peu probable que vous n’ayez pas de menu, puisque vous avez certainement dû créer au moins une page pour vous présenter etc.

Il va donc falloir ajouter cette nouvelle catégorie au menu dynamique de WordPress. L’adaptation dépendra ici du thème que vous avez sur votre site. Je vais me baser sur twentyten mais cette manipulation devrait convenir à la plupart des thèmes.

La fonction WordPress permettant de générer automatiquement le menu correspond à cette ligne dans le fichier header du thème twentyten :

<?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) ); ?>

Elle génère le code html suivant :

<div class="menu"><ul><li class="current_page_item"><a href="http://www.mon-blog.fr/" title="Accueil">Accueil</a></li><li class="page_item page-item-643"><a href="/live/">Live</a></li><li class="page_item page-item-23"><a href="/a-propos/">A propos</a></li><li class="page_item page-item-91"><a href="/contact/">Contact</a></li></ul></div>

On pourrait vouloir simplement ajouter un lien avant la fonction wp_nav_menu, cependant, elle génère elle-même une liste (ul), on obtiendrait soit un lien hors de la liste, soit deux listes l’une contre l’autre et ce ne serait donc pas une solution propre. On va donc avoir recours à la fonction wp_list_pages. Nous allons remplacer la ligne wp_nav_menu, par ceci :

<div class="menu">
  <ul>
    <li><a href="http://www.mon-blog.fr">Blog</a></li>
    <li><a href="http://www.mon-blog.fr/life">Life</a></li>
    <?php wp_list_pages('title_li=&depth=1&link_before=<span>&link_after=</span>'); ?>
   </ul>
</div>

Nous avons donc ajouté plusieurs choses/

Note : vous trouverez toutes les informations concernant les fonctions wp_nav_menu et wp_list_pages dans le codex WordPress.

N’oubliez pas de mettre à jour le thème sur les deux installations afin que le tout soit cohérent. Enfin, dernière petite adaptation, dans le thème de “life”, modifiez le lien du logo pour qu’il pointe vers www.mon-blog.fr et non www.mon-blog.fr/live, sinon ça fait un peu bizarre.

Dernier détail, comme les deux sites ne partagent pas la même base de données, si dans votre sidebar vous avez des liens vers les catégories etc, ils seront différents sur chacune de vos pages de blog. Encore une fois, certains trouverons que c’est un avantage (contenu qui s’adapte en fonction de la page et du sujet), d’autres n’y trouveront pas leur compte…

Une seule base mais avec des tables différentes

Ça, ça va être très très rapide à expliquer. L’intérêt ici est que si vous n’avez pas d’autre base de données à votre disposition, vous pouvez tout à fait configurer plusieurs blogs avec une seule base de données. La technique est exactement la même que la précédente. Au moment de la configuration de WordPress, lorsque celui-ci vous demande le nom de votre BDD, le mot de passe etc, vous donnez les mêmes informations qu’avec votre blog déjà en fonctionnement (vous les retrouverez au besoin dans le fichier wp-admin), mais vous changez le préfixe des tables ! C’est aussi simple que cela. Roulez jeunesse !

Note : je vous conseille quand même de faire une sauvegarde de votre base de données avant d’y effectuer ce genre d’opérations, on n’est jamais trop prudent…

Voilà ! Nous avons fini de charcuter WordPress pour l’adapter à nos besoins.

Commentaires

Ben dit –

Merci l'ami. gentil petit hack sympa la 3 eme technique, je vais faire pareil à la maison.

Buzut dit –

Content que ça puisse aider :) Merci pour le commentaire !

SuperSerge dit –

Bonjour,

merci pour ces astuces qui m'ont l'air de très bien fonctionner. En fait je compte créer un site évolutif avec wordpress, dont le contenu change chaque année mais avec cependant la possibilité de consulter le contenu des années précédentes... C'est un site pour une exposition où chaque année le thème change, donc selon l'année à laquelle on consulte le site on arrive sur la page de ladite année. Je ne sais pas si je suis bien clair...

Bref! Laquelle de vos solutions ci dessus me conseillerez-vous?

merci d'avance.

Buzut dit –

Bonsoir,

je pense que la meilleur solution est la première. Vous aurez du coup un blog distinct par année, et vous avez la possibilité de lister les blogs des années précédentes dans le menu pour consultation.

faites moi savoir si vous avez besoin de plus d'info !

SuperSerge dit –

Salut Buzut, c'est que je pensais, merci pour ta réponse. Donc pour la construction des dossiers dans mon serveur ftp, j'aurais ma racine www/ (chez OVH) et à l'intérieur un dossier par année 2012/, 2013/, ... chacun relié à sa base de donnée correspondante. La question que je me pose c'est comment définir dans quel dossier se trouve la page d'accueil? Vu qu'il s'agit de l'édition 2012 il faudra qu'il pointe vers le dossier 2012/ mais quand on sera en 2013 il faudra que la page d'accueil pointe vers l'index.php du dossier 2013.

Est ce que tu aurait une idée de comment procéder?

merci d'avance.

Buzut dit –

Cest une très bonne question que tu posés la ! Il y a peut être une option (ou un hack) wordpress qui permet de choisir un dossier spécifique dans lequel on place la page d'accueil, sinon, le plus simple à mon avis est que tu places directement dans ton dossier racine /www un index.php avec une redirection php, et chaque année, tu n'auras donc plus qu'à modifier l'adresse de redirection !

SuperSerge dit –

Ok, super merci de ta réponse, je vais tester ça. Je te tient au courant de l'évolution de mon projet.

Buzut dit –

J'attends de tes nouvelles alors ;)

Martine dit –

Bonjour,

Avec la première méthode, est-ce qu'on doit obligatoirement conserver le même thème pour chaque installation ou est-ce possible d'avoir un thème différent?

Merci!

Buzut dit –

Salut ! Avec la première méthode, il est tout à fait possible d'installer un thème différent entre les deux blogs, ça ne pose aucun problème :)

Martine dit –

merci beaucoup! :)

SuperSerge dit –

Salut Buzut, mon projet avance bien, j'en suis encore à dompter le template que j'ai acheté mais ça va ;) En fait j'ai une question par rapport à la redirection, est ce que je devrait la faire un php avec header(), ou avec la balise meta refresh du html? Est ce que ça aurait une incidence sur référencement ou quoi que ce soit d'autre?

Merci d'avance et bonne journée :)

Buzut dit –

Content que ça progresse :D !

le meta refresh redirige du côté client, c'est, je trouve, nettement moins propre qu'une redirection côté serveur en php. C'est plus user-friendly d'utiliser header('Location: http://www.example.com/');

Ensuite, niveau référencement, pareil, le header sera mieux puisque tu peux préciser le type de redirection avec header().

Par défaut, header('Location:…') met une redirection 302, donc temporaire. Ainsi, les moteurs de recherche continueront à référencer ta page d'accueil (celle qui redirige), ce qui est dans ton cas le plus judicieux, puisque tu veux pouvoir rediriger sur une autre l'année d'après !

SuperSerge dit –

ok, donc il faudra que j'optimise le référencement de la page qui redirige, je pensais juste mettre la balise header au départ, mais en fait il faut que je fasse une vrai page html avec meta description et tout, c'est bien ça?

déçevant dit –

J'avais lu que Wordpress était "simple". Depuis hier je cherche comment utilisé plusieurs menus et je ne tombe que sur des articles comme le tien (ce n'est pas une critique). Je n'y comprend rien mais rien...vu que je n'y connait rien en php. Et ce ne sont que des menus, qu'est ce que ça va être quand ça sera des choses plus complexes ?!

Je n'ose imaginé ce que ça doit donné avec les autres CMS vu que Wordpress est "simple". C'est décourageant et à vous dégouté d'essayer de créer un blog from scratch. Je vais finir par lâcher prise et me contenter des médiocres plates forme clé en main style over-blog.

Merci quand même pour ton article.

Buzut dit –

Salut ! Wordpress est relativement simple à utiliser, mais dès que tu veux aller au-delà des fonctionnalités qui sont offertes de base, il faudra souvent mettre les mains dans le cambouis.

A l'inverse, tu trouveras des CMS qui offrent plus d'options de base, mais qui seront beaucoup plus complexes à prendre en main (je pense notamment à Joomla).

La limite de mon raisonnement réside néenmoins dans le fait que tu trouveras aisément de nombreux plugin pour WP qui te permettront de faire à peu près tout et n'importe quoi sans avoir à comprendre comment ça fonctionne et sans avoir aucune notion de programmation. C'est de ce côté la que tu devrais chercher. Fais un tour sur les forums de Wodpress francophone, ils devraient pouvoir te renseigner concernant les bons plugins ;)

SuperSerge dit –

Au fait, ces nouveaux commentaires me font réagir, j'ai teminé mon site ! Pour cette année du moins ;)

http://www.the-fite.com/

Buzut dit –

Je viens de jeter un coup d'oeil à ton site. Super, ça fait vraiment très pro et le design est bien léché. J'aime beaucoup, beau travail !

SuperSerge dit –

Merci ! Content d'avoir un compliment d'un expert ;)

Jean dit –

Bonjour, merci pour les explications détaillées. C'est ce que je cherchais pour un nouveau site que je suis en train de créer. Malheureusement, j'ai suivi toutes les étapes scrupuleusement, j'ai vérifié et re-vérifié mais ça ne fonctionne pas du tout. Je vais abandonner et essayer d'aller glaner d'autres solutions ailleurs.

Jean dit –

Super !!! Ca fonctionne à présent. Il y avait une petite erreur de syntaxe que j'avais commise et reproduite pour tous les autres fichiers .php de chaque catégorie (problème du copier-coller). Donc, c'est de ma faute si ça ne fonctionnait pas, évidemment. Merci encore pour ces solutions et surtout, ce qui est très rare pour les personnes en ce domaine, de faire preuve de pédagogie et de très bien détailler pas-à-pas les solutions.

Buzut dit –

Salut Jean,

Je suis content que tu ais pu résoudre ton problème et que tu sois arrivé a faire ce que tu voulais. Merci pour le compliment sur ma pédagogie. Je peste moi meme contre certains tutos qui considèrent de nombreux points comme evidents et qui, de ce fait, les passent sous silence. J'essaye donc de ne pas reproduire ça ici ;)

axel dit –

bonjour

comment as tu fais, cela fait 2 jours que je cherche la solution.

Qui peut bien m'aider

louise dit –

Bonjour, j'aimerais savoir si on arrive à distinguer les catégories si on utilise la meme base de données. En particulier, le blog a deux sortes d'articles qui sont catalogués différents,actuellement, on arrive à faire voir les articles sur deux pages différentes, mais les tags et les catégories sont mélangées. merci

Buzut dit –

En ce qui concerne les catégories différenciées selon la page avec la même table de base de données, ce n'est pas possible à ma connaissance. Pour obtenir ce résultat, le plus simple est d'avoir recours à deux tables différentes.

Sinon, il faut jeter on œil aux fonctions internes de wordpress en se référent au codex. Mais ça risque de prendre du temps…

Onglette dit –

Bonjour, Je suis sur la méthode 3, j'ai bien récupéré mon ID de la catégorie créée, j'ai mis la petite ligne dans mon code de page index (copié/collé avec mon id donc pas de soucis de syntaxe normalement...) et là ben ça veut pas :

"Dans l’état actuel des choses, votre page de blog « index » n’affiche déjà plus les articles dont vous avez sélectionné les ID"

Thème twenty eleven. Ma page d'accueil est une page statique avec une colonne latérale, est-ce que ca viendrait du fait qu'il faille en faire une page d'articles ? (ho my god ! faite que cette question ne soit pas stupide hihihi sinon tant pis)

Merci.

Buzut dit –

Bonjour;

si votre page d'accueil est une page statique, elle n'est donc pas la page de blog non ? Elle n'affiche dans tous les cas aucun article. Je me trompe ? Auquel cas il n'y aurait directement qu'a passer à l'étape concernant le template de page.

Marc dit –

Bonjour, merci beaucoup pour ces solutions. J'ai mis en place la 3° méthode et tout s'est bien déroulé. Il y a seulement un hic un peu gênant sur mon site. Sur les nouvelles pages, il apparaît que les articles et le footer ainsi que les widgets sont totalement absents de celles-ci. Est-ce qu'il y a quelque chose à faire ? Merci déjà pour ces tutoriels très bien expliqués et efficaces. Marc.

Buzut dit –

C'est bizarre en effet. as-tu bien fait un copier-coller de tout l'index.php dans les nouveaux fichiers de template ?

Quel est le thème employé ? C'est un thème perso ou un thème connu ? Il faudrait je pense regarder du côté des inclues qui servent à insérer le footer et la sidebar sur les pages, le problème peut venir de là…

Marc dit –

Bonjour Buzut, J'utilise Filezilla. Je télécharge le fichier index.php et insère uniquement les lignes indiquées à la fois pour le index.php du site et aussi pour les pages correspondant aux catégories. J'ai essayé sur un autre site. Il y a bien création des nouvelles pages, apparition des articles par page-catégorie et qui n'apparaissent en home page (exactement le résultat recherché donc avec ce système). Mais cette fois-ci, c'est la mise en page du site qui est complétement faussée, le footer apparaissant ramassé en haut à droite et les widgets apparaissant toujours du côté spécifié mais en-dessous des articles de la page-catégorie. Finalement, ce problème assez rédhibitoire pour un visiteur humain fait que je vais certainement revenir à la présentation wordpress par défaut. C'est vraiment dommage !!!

Marc dit –

Bonjour, c'est encore moi. Etrangement mais avec joie :), le 2° site s'est de lui-même remis en place quelques minutes après la modification. Tout va bien pour celui-ci. Quant au premier site, j'ai vérifié sur d'autres pages "normales" et j'ai constaté que les widgets n'apparaissait pas naturellement sur les autres pages. J'en déduis que le thème est construit ainsi. La seule différence est que dans le 1° site, le footer apparaît dans les autres pages ("normales") que la home page alors qu'il n'apparaît pas dans les pages-catégories. C'est la seule différence et je vais creuser un peu encore. A plus et merci encore, Buzut !

Marc dit –

Finalement, non, les pages-catégories du 2° site ont le footer et les widgets sens dessus-dessous comme décrit précédemment. Je ne comprends rien et je vais revenir à la structure originale de Wordpress. C'est trop de soucis et de perte de temps !

Marc dit –

Après, j'arrête, c'est promis... ;)

J'ai fini par trouver la solution. En bidouillant en fin de script, là où apparaissent et , j'ai créé des divisions et le footer et les widgets ont retrouvé leurs emplacements originels et adéquats. Maintenant, je ne suis qu'un amateur autodictate (un peit bidouilleur de HTML, rien de plus) et je n'arrive pas à comprendre pourquoi il faut modifier le code du thème concernant le footer et les widgets pour les pages-catégories créées ? le code original du thème fonctionne pour la home page et les autres pages mais doit être quelque peu modifié pour les pages-catégories. Mais l'essentiel est que tout soit à la même et bonne place. ;)

Buzut dit –

C'est bien tu me travailles mon référencement Marc, merci ;)

Wordpress n'affiche pas tes balises car c'est du code, peux-tu juste donner leur nom sans les &lt; et &gt; si ce sont des balises html, pareil vire la syntaxe si c'est du php (ou alors tape les en entités html) http://htmlentities.net/

Normalement il n'y a rien de plus à modifier. Mais comme chaque thème est différent, tout dépend de comment il a été conçu, et ça, sans avoir le code du thème sous les yeux, c'est difficile à dire…

Quoi qu'il en soit. Je suis content que ta persévérance ait payé et que tu sois arrivé à tout mettre en place !

Elodie dit –

Bonjour, J'ai testé la 3eme solution sans succès, pourtant j'ai tout suivi à la lettre. A moins que je n'ai pas tout compris et que ca ne correspond pas à mes attentes !! :'( Mon thème est mystique. 1ère phase : . Ca fonctionne !! Les articles correspondant à la catégorie ont disparu !!! 2eme phase : J'ai créé ma page, j'y ai associé le template, ma page apparait dans mon blog sauf qu'elle est vide ! Les articles correspondant à la catégorie, n'apparaissent pas. Si je rempli ma page dans le BO ca fontionne mais ca n'est pas le but.... car moi ce que je veux c'est faire apparaitre les articles de la catégorie !! C'est bien le but de votre article, non ?? Help !!!

Elodie dit –

Oufff !!!! J'ai réussi !!! J'ai enlever le code else et mis un code dont vous ne parlez pas ... Bref !!! en résumé il faut être chirurgien !!! Mdr !! Merci encore pour cet article car peut de personnes en parle !!

axel dit –

Bonjour

J'ai apparemment le même souci, quel est donc le code à enlever, cela pourrait peut être m'aider

Merci

Hichem dit –

Salut Buzut, Merci pour ton article très astucieux. Je vais me lancer aujourd'hui dans la 3ème méthode qui a l'air de correspondre au mieux à mon besoin. Je rajoute ton adresse dans mes favoris, car je pense y trouver quelques autres perles. Une question sans rapport avec cet article : comment as-tu fait pour que ton bandeau de site, et menu prennent toute la largeur de page ? C'est un thème spécifique ? Je reviendrai t'informer de mon essai de plusieurs pages de blog.

Buzut dit –

Salut Hichem, merci de ton intérêt.

En ce qui concerne le bandeau, le thème est fait main. Mais pour avoir toute la largeur de la page, il faut créer une div de largeur 100% et l'image de fond se répète sur l'axe des x. Tu peux aller voir mon CSS si tu veux, tout est dans #header http://buzut.fr/wp-content/themes/buzut/style.css

Hichem dit –

Merci pour ta rapide réponse (un dimanche en plus !) Les CSS, c'est pour la prochaine fois :-), avec surtout la création de mon propre thème. Je vais rester sur le sujet principal de ton article pour aujourd'hui, car le besoin est certes plus important.

Hichem dit –

Je viens de mettre en place la 3ème méthode, qui me paraissait la plus rapide. Tout est ok concernant l'apparition des articles sur 2 pages différentes (j'utilise le thème de WordPress Twenty Eleven), par contre comme le disait Marc un peu plus haut, c'est un peu l'anarchie dans l'apparition des widgets (après les articles), mais aussi au niveau des titres, de la bulle "commentaires" et du bouton "modifier". Plus aucun rapport avec les articles de base. Et je n'ai pas trop bien compris la réponse où tu parles de virer les balises ou autres ;-( Un p'tit coup de main, Buzut ? Merci

Buzut dit –

Ma réponse à Marc concernait son commentaire "là où apparaissent et " on ne peut pas voir les balises dont il parle car WP échappe le code dans les commentaires pour ne pas qu'il s'exécute, donc rien à virer dans le template hein ! :D

Au niveau des widgets qui ne s'affiche pas bien, je n'ai pas le souvenir de problème avec twenty eleven, peut être le nouveau a-t-il changé… J'essayerai de jeter un coup d’œil demain

axel dit –

Bonjour

J'ai bien lu l'article très intéressant par contre impossible d'y arriver. Est je sais vraiment pas ou ça bloque mais je ne vois pas les articles. Peux tu m'aider à résoudre le problème. Bien à toi

Océane dit –

Franchement je cherchais cette astuce-là depuis des semaines, merci! Je vais utiliser la 3e méthode, car ce dernier semble être plus facile pour une fille, non gekette S.v.p. :o)

Océane dit –

Bon ca ne marche pas. :(

axel dit –

salut moi aussi cela ne fonctionnais pas j'ai fait autrement je recherche et te le dis

Jeremy D dit –

Hello,

je commence a trvaailler sur WP en local, et j'ai voulu suivre ton tuto. Ca n'a pas fonctionné, et je ne peux plus accéder à mes pages ("error"...) autres que la page d'accueil. J'ai voulu effacer la ligne mise dans index.php, mais ça ne fonctionne toujours pas... aie aie aie... J'ai voulu ajouter de nouvelles pages pour voir si cela avait affecté uniquement les anciennes pages, et elles ne s'affichent pas non plus... Help !!! merci

Jeremy D dit –

plus précisément : "the requested URL xxx was not found on this server" .... help......

axel dit –

bonjour moi aussi cela ne marchait pas, alors j'ai réussi avec ça :

a mettre avant : ?php if( have_posts() ) : ?&gt;

rien de plus je crois

bon courage

Jeremy D dit –

Merci pour ta réponse. Est-ce que cela marchera si je continue à travailler en local ?

axel dit –

Bonjour

Je ne sais pas du tout

Bien à toi

axel dit –

bonjour

j’ai réussi avec ça :

a mettre avant : ?php if( have_posts() ) : ?&gt;

Jeremy D dit –

Bon, j'essaie de m'en sortir avec l'extension Associated Posts, qui me permet de créer plusieurs pages avec des articles, mais ne me permet pas encore d'enlever certains articles de la page principale...

Jeremy D dit –

En fait je crois que ça marche complètement avec l'association de 2 extensions : Associated Posts (Lite) + Ultimate Category Excluder !!!!!

duude dit –

Hey,

Merci Buzut, je m'y suis mis et en 2 - 2 c'était fait (3ème solution). Juste un prob au milieu de la procédure à cause du thème qui affiche par défaut un article mais c'est corrigé. C'est vraiment la meilleure solution pour avoir plusieurs pages de blogs, gg!

Question bonus : sur la nouvelle page créée, tu sais où aller pour insérer un texte fixe en haut de page? Comme t'a fait pour Wazup en fait : )

Buzut dit –

yep !

Alors, très simple… Quand tu créés ton template de page – dans mon exemple live.php – tu places ton texte en dur en HTML directement au niveau du template. S'il est pas voué à changer tous les 4 matins, c'est sans problèmes ;)

duude dit –

C'est perfect cimer !

Sly dit –

Super, tu m'as bien aidé! c'est clair, bien fichu et on s'endort pas entre les lignes. Merci!

invasion urbaine dit –

Bonjour, je souhaites faire la même chose mais je n'arrive pas à appliquer les méthodes j'ai télécharger divers logiciels pour installer Wordpress sur mon ordi mais je n'obtiens pas les mêmes fichiers en clair je n'arrive à rien faire comment puis-je faire svp je cherche la méthode simplifiée et plus détaillée car je ne comprend pas grand choses merci.

Buzut dit –

il n'y a pas besoin de logiciels pour installer wordpress ! A moins que tu ne parles de WAMP ou de MAMP pour installer un serveur sur ton ordinateur ?

invasion urbaine dit –

J'ai installer Wordpress via le site mais je n'ai pas réussi les différentes manips les fichiers mentionnés ne figurer pas dans ce que j'avais.

Semahan dit –

Cool, merci pour ces techniques ! Je trouve les 2 premières trop lourdes, même si c'est bien d'avoir pensé à ceux qui ont un hébergement avec une seule BDD, mais la 3e déboite. Je la teste demain ! Merci d'avoir pris le temps de l'écrire et de partager !

Buzut dit –

Et merci à toi d'avoir pris le temps de laisser un commentaire, ça fait toujours plaisir !

Greg dit –

Salut! super sympa la 3ème technique! Depuis le temps que je cherchais comment faire! Par contre, comment faire pour enlever toute la colonne de widget sur le côté droit de mon site ou bien l'aligner comme il le faut comme sur la page d'accueil (pages des articles du blog). Merci :)

Buzut dit –

Hello !

Alors, pour ce que tu demandes, cela dépend vraiment du thème et je ne pourrai donc pas trop t'aider là dessus… Normalement, la sidebar doit s'afficher comme sur les autres pages.

Tout ce que je peux te conseiller c'est de jeter un œil à l'HTML de ta page pour voir si ça ne peut pas te donner un indice, sinon, sur ta page de template, tu enlèves la ligne qui inclut la sidebar, tout bonnement.

Bon courage ;)

Cizio dit –

Bonjour, merci pour ton tuto tout d’abord =).

Deja tout marche ou enfin presque , sur mon accueil les articles s'affichent avec son images malheureusement je ne sais pas pourquoi, sur ma nouvelle page " partenaires " les articles de cette catégories s'affichent bien mais sans les photos, alors que le code est le même que sur l'accueil excepter ce que l'on ajouter en suivant ce tuto;

Est ce que vous serez d'ou viens le problème , ou si le code ajouter enlève les photos ?

Buzut dit –

Bonjour,

Cela dépend du thème, de la configuration etc… Comme chaque cas est différent, il n'y a jamais de meilleure solution qu'un coup d'œil au code. Si en revanche tes articles sont affichés en entiers sur tes pages, et que toutes les photos sautent, là, c'est très bizarre…

Tiri dit –

Bonjour,

Archi débutant en toute cette cuisine, je suis chaud pour tenter la 3ème méthode. Le but est d'avoir une catégorie d'article en intranet, et une autre en public. Mais où trouver la table wp_terms ? Accessible depuis filezilla ? Thème twenty eleven

Merci de votre aide !

Buzut dit –

c'est accessible depuis ton gestionnaire de base de données, généralement phpmyadmin

Eno dit –

Bonjour,

Concernant l'approche n°3, dans l'index.php de mon thème, la loop est appelée avec get_template_part('loop'); et n'est pas écrite directement dans le fichier. Donc forcément je ne peux pas modifier la condition if différemment suivant mon template puisqu'il s'agit du même fichier unique loop.php ? Comment faire dans ce cas ?

Merci pour toute aide...

Cizio dit –

Tu peux en créer un autre fichier loop-2 et l'appeller a la place du première précèdent. ?

candice dit –

Bonjour, merci pour ce tuto tout d'abord !

J'ai semble-t-il tout fait de la 3ème méthode comme décrite, simplement, mon flux d'articles de blog remonte via le template-blog et non pas l'index.php chez moi.

J'ai donc créé donc le nouveau template Live à partir de mon template blog (et non pas l'index, sinon ça ne marchait pas), et la 2ème page de blog fonctionne à merveille, en ne gardant que la bonne catégorie sélectionnée etc.

Le hic c'est que dans le template-blog initial, je ne sais pas où placer la ligne de code , j'ai essayé un peu tous les endroits mais peut-être que mon thème met d'office d'autres conditions qui parasitent le machin.

Pourriez-vous m'indiquer comment/où faire ? Voici le code du template-blog (je répète, la 2ème page de blog fonctionne très bien et ne fait remonter que les bons articles)

get_option( 'posts_per_page' ), 'paged' =&gt; max( 1, get_query_var( 'paged' ) ) ); ?&gt;

have_posts() ) : ?&gt;

have_posts() ) : $wp_query-&gt;the_post(); ?&gt; <!-- .entries --> <!-- #content --> <!-- #container -->

Merci beaucoup !!! Candice

candice dit –

oups, mon commentaire a été mangé par la machine, le code a été coupé. Le revoici :

get_option( 'posts_per_page' ), 'paged' =&gt; max( 1, get_query_var( 'paged' ) ) ); ?&gt;

have_posts() ) : ?&gt;

have_posts() ) : $wp_query-&gt;the_post(); ?&gt; <!-- .entries --> <!-- #content --> <!-- #container -->

Gertie dit –

&quot;There is no tea party, just more li;.s&amp;quoteI would suggest you do some research or better yet, just open your eyes.Then you might not look as ignorant when you make these type of statements.

candice dit –

(vous avez dû le recevoir en entier dans vos notif mail je pense...)

Joffrey dit –

Merci pour cet article qui est bien écrit cependant j'ai un petit soucis, je n'ai pas de donc je ne sais pas où mettre ce code (que tu donnes)

Peux-tu m'aider ? Merci :) http://pastebin.com/Y822MPDs &lt;- code de ma page

thierry dit –

j'ai suivit la méthode 3 pour enlever des catégorie de ma page principale d'articles tout en oubliant pas la pagination bien sur

ET la j'ai un gros soucis : mes post maintenant s'affichent du plus ancien au plus récent ??

voici le script et la query mise avant la boucle : get_header(); ?&gt;

&lt;?php

$paged = (get_query_var(&#039;paged&#039;)) ?

get_query_var(&#039;paged&#039;) : 1; query_posts( &#039;&amp;cat=-10,11,12,-13&#039;.&#039;&amp;paged=&#039;.$paged);

etc...

j'ai tout essayé dans la query comme ajouter: &amp;order=DESC ou &amp;orderby=date&amp;order=DESC

mais rien ne fonctionne je pige plus rien et je suis pas le seul après avoir fouillé le codex et le web !! je sèche

comment as tu eu le même soucis?? sinon comment a tu fait

tout ça SUR THEME TWENTYELEVEN VERSION WP 3.5.1 OU VERSION 3.7.1

Buzut dit –

Salut Thierry,

non je n'avais pas rencontré ce problème ! C'est vraiment bizarre, je ne vois pas comment ce hack peut influer sur l'ordre de display des posts…

As-tu vérifié que toutes les dates des posts sont correctes ? Aucune installation de plugin récente ?

Ce thread peut peut-être te venir en aide [en] http://en.forums.wordpress.com/topic/latest-post-does-not-display-first

thierry dit –

Bonjour buzut et merci pour ta réponse rapide,

mais non juste 3 plugin contact form7, TinyMCE Advanced, et seo url pages, et je pense pas que ce soit de leurs faute, ni un problème de timezone elle est toujours la même...

à l'inverse quand je passe cette query: query_posts( '&amp;cat=7,8,9,10'.'&amp;paged='.$paged ); l'ordre des post est bon

le problème c'est bien à l'exclusion des cat, exemple j'ajoute juste une exclusion à cette query: query_posts( '&amp;cat=7,8,9,10,-12'.'&amp;paged='.$paged );

et ça recommence l'ordre des posts est inversé ??? et ajouter &amp;orderby=date&amp;order=DESC Ni change rien non plus

UN TRUC DE FOU !!!

thierry dit –

problème de post inversė du nouveau mais ça reste inexpliquable :

je étais en mod développement en local sous Wamp

j'ai eu l'idée d'essayer la même query en mode de production sur le serveur et là Surprise ça marche les post sont dans le bon ordre ???

reste à comprendre pourquoi en local ça fonctionne pas ??? c'est pas cool de developer en production à cause de ça

si quelqu.un à une idée je suis preneur !!

mezcalito dit –

Bonjour, je tente de mettre en place votre astuce n°3 mais dès le debut je me heurte à une dificulté : à la racine de mon site je tyrouve un fichier index.php mais celui ci ne contient pas les lignes if(have_post()).....de la loop ! voilà ce que j'y trouve :

&lt;?php / * Front to the WordPress application. This file doesn&#039;t do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */

/ * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define(&#039;WP_USE_THEMES&#039;, true);

/ Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . &#039;/wp-blog-header.php&#039; );

du coup suis je bien dans le bon index.php ? et si oui où dois je mettre ma &quot;commande query_post pour filtrer les catégories ? sinon quel bon fichier index.php dois je manipuler ? cordialement.

thierry dit –

regarde si tu as fichier: home.php ....dans ton thème

si oui c'est peut être lui qui gère ta page d'articles

mezcalito dit –

je pense avoir trouvé "le coupable" ! c'est le fichier index.php dans le dossier du theme utilisé effectivement !? ce fichier est bien plus fournis que le premier proposé par mes soins ici lol

en voici son contenu :

&lt;div id="post-"&gt;

&lt;a href=&quot;"&gt;</a>

&lt;!-- &lt;?php the_tags(&#039;Tags: &#039;, &#039;, &#039;, &#039;'); ?&gt; Posted in | --&gt;

Not Found

je suppose donc que l'insertion doit se faire au tout debut ( dois je sauter une ligne ?

Cordialement.

mezcalito dit –

le copier coller ne fonctionne pas correctement ici ! mais je pense que c'est le bon fichier !

mezcalito dit –

Bon j'ai enfin réussi à trouver le index.php a trifouiller ! mais mes manip ne donnent rien ! j'ai tenter de filtrer les id d'articles que je ne voulais plus voir grâce à l'utilisation des catégories et tous les articles s'affichent qd mm ! plusieurs questions :

1) cette commande se place où exactement ds le fichier ? (sans les guillemets bien entendu) ""

2)j'ai placer le tag en tte première ligne du fichier live.php c'est correcte ?

3)le fichier live.php est dans le même répertoire que index.php, est ce correcte ? ( l'ensemble dans le dossier du theme utilisé par le site)

4)j'ai bien créer une nouvelle page avec comme template : live.php

5) je rajoute du coup la commande pour afficher les articles à filtrer dans live.php : "" et le slug qui convient j'obtiens mon filtrage comme il faut!

Mais en page principale ( le index.php j'ai toujours tous les articles qui s'affichent sans filtrage ! où est l'erreur stp ?

mezcalito dit –

puis je te joindre en mp stp ? merci

Buzut dit –

Bien entendu !

Chris dit –

Bonjour, j'ai créé un site pour une communauté religieuse, ma question :

dans la partie "Mouvements" de mon site (doyennedeleuze.be) j'aimerais que chaque responsable de centre ai un code d'accès wp pour remplir eux même la page et n'ont pas accès au reste des pages mais seulement leur page en question. Que me conseillez vous?

Buzut dit –

Bonjour,

wordpress ne permet pas dans sa gestion des droits, une telle utilisation. Vous allez néanmoins pouvoir élargir ceux-là pas le biais d'un plugin.

Dans cet article, vous trouverez dans la section "Option 4: Expanded User Roles and Capabilities" la réponse à votre question.

http://www.ostraining.com/blog/wordpress-news/user-control/ [en]

Pascal dit –

Salut, J'ai essaye la solution numero 3. Cela fonctionne bien pour enlever les category que je ne veux pas mais je n'arrive pas a creer ma deuxieme page. Pourtant je vois bien mon template dans les attributs. J'ai beau faire tout ce que tu dis, j'obtiens toujours une page blanche. Est-ce que c'est a cause que j'utilise une front page static? Je ne m'y connais pas du tout en php. J'utilise WP 3.8.1 avec le theme twenty fourteen.

Pascal dit –

J'ai trouve une autre facon de faire. Merci

Thomas dit –

Laquelle ?

Parce que j'ai le meme problème...

Julien dit –

Bonjour,

Quand tu dis "Si vous y accédez par PhpMyAdmin...", ça veut dire qu'il existe une solution alternative pour ta troisième proposition? Je suis novice et sur mac (mavericks), ce qui n'arrange rien à ma compréhension de phpmyadmin. Avec Filezilla, ca serait possible de faire le même travail pour bidouiller la BDD? Sinon, tu as un tuto simple et facile de phomyadmin pour mac quelque part (pas faute d'avoir chercher pourtant, mais ca reste hyper technique avec des configurations locales et tout...) :-( Désolé pour la question de débutant ! Et merci pour les tuyaux !

Buzut dit –

Il n'existe pas une, mais des solutions alternatives. PHPMYADMIN est une interface web, il y en a d'autres que tu peux installer.

Pour ma part, le plus direct, sécurisé et puissant, c'est l'interface en ligne de commande. Là tu discutes directement avec MySQL sur son interface par défaut. J'ai écrit un article à ce sujet : http://buzut.fr/2012/06/23/maitrisez-mysql-en-cli/

N'hésite pas si tu as d'autres questions ;)

hatfab dit –

Bonsoir, Merci pour ce tuto qui va finir par m'aider, si j'arrive à m'en sortir, ce qui n'est pas le cas pour le moment. J'utilise un thème du commerce et non pas les thèmes par défaut de WP. Il y a une page "index.php" bien sûr, mais il y a aussi une page "page-blog.php" est-ce que ça n'est plutôt celle-là que je dois dupliquer et modifier ? Et puis du coup que doit-on choisir dans Réglage &gt; Option de lecture &gt; page des articles ? Rien ? Merci

Madge dit –

Too many coetlimmnps too little space, thanks!

Diego dit –

Bonjour Buzut,

je ne parviens pas à faire fonctionner les morceaux de codes comme escompté. Je travaille dans un theme maison dérivés probablement des 20/30 et 20/40, sur la version wp antérieure à la 4.0.

Je souhaite: 1. Créer une page (nos campagnes) qui regroupe tous les posts des différentes campagnes. 2. Créer un blog par campagne (environs 30).

1. Le blog “mère”, ca, c’était pas trop compliqué: A. j’ai demandé une “static front page” dans le menu “apparence/customize”. Et puis “our campaigns” dans le menu déroulant “post page”. Et puis j’ai modifié l’html de la page home.php qui génère la page “nos campagnes”. B. J’ai créé des catégories et des posts que j’ai catégorisés. C. Tous les posts s’affichents. Mais &gt; Quand on enlève le “while”, il affiche un media formaté comme un post (type texte d’un carrousel et pas un post). &gt; Avec le “while”, il affiche en plus des posts que je n’ai pas créé: “auto draft” sans catégorie. &gt; Et j’ai voulu tester le code , sans succès: tout s'affiche. Les ID de catégories viennent du onmousover sur la catégorie dans la rubrique du même nom.

2. Ensuite, pour les blogs “filles”. A. J’ai créé une catégorie “dévolution-de-la-case-de-tete”. Puis les pages “Liste de campagne.html”, “Dévolution de la case de tête.HTML” via le menu “pages/new” et “Dévolution de la case de tête.PHP” via “apparence/theme editor”. C. J’ai repris un des posts auquel j’ai attribué en plus la catégorie “dévolution-de-la-case-de-tete”. B. J’ai copié le code “while” dans ma page “Dévolution de la case de tête.php”. Et j’ai viré les “If” et “Else”. Mais: &gt; Sans le code “paged”, il y affiche la catégorie “dévolution de la case de tête” formatée comme un post, mais sans “content”, ni “catégorie”, vu qu’il n’y en pas pas. &gt; Avec le code “paged”, il n’affiche rien, ni post, ni catégorie.

Une idée?

Diego dit –

Bon, j'ai perdu pas mal de temps ajd sur ce truc. En regardant du côté anglais, j'ai trouvé ceci: http://codex.wordpress.org/Category_Templates En gros, il ne faut pas utiliser des pages, mais des catégories. Une "page" catégorie est, en fait, un blog! C'est limpide.

Buzut dit –

En effet ça peut d'une certaine manière fonctionner. Cependant, deux inconvénients majeurs a cette technique selon moi : - Tu ne peux afficher sur ta "deuxième page de blog" que les articles d'une seule et même catégorie, - mais surtout les articles affiches sur ta seconde page de blog s'affichent toujours sur la page de blog principale !

Diego dit –

Oui, très juste. Heureusement, en ce qui me concerne, ça me va très bien.

Merci pour tous ces efforts de pédagogie. Je suis toujours impressionné par ces personnes qui prennent du temps et publient du contenu gracieusement.

Maintenant, si tu as une idée pour mes autres questions, n'hésite pas...

Étien' dit –

Merci pour l'article! J'ai commencé à bidouiller à l'aide de la méthode 3, pour l'instant ça marche en local!

gwen dit –

Bonjour, Merci pour le tuto il est trés clair et trés utile! J'ai utilisée la 3eme méthode et j'ai un soucis lorsque je clique sur "lire plus" à la fin du résumé de mon article rien ne se passe je n'aie plus accès a mon article complet. N'étant pas douée en PHP j'ai besoin d'un petit coup de main!! Avez vous une idée d'où peut venir le problème ?

voici mon code :

<!-- End page heading -->

&lt;a href=&quot;" class="breadcrumb__link"&gt;</a> <!-- End breadcrumb --> <!-- End wrap breadcrumb --> <!-- End container --> <!-- End page header -->

//la ligne suivante, vous l'avez déjà, ne la mettez donc pas deux fois, //il s'agit juste de placer le morceau ci-dessus avant la ligne qui suit

'505px','height'=&gt;'318px')); } else { if(get_the_post_thumbnail($post-&gt;ID,'post-list-thumba')){echo get_the_post_thumbnail($post-&gt;ID,'post-list-thumba');}else{echo '';} } ?&gt; <!-- End blog thumb -->

&lt;a href=&quot;"&gt;</a>

<!-- End meta --> <!-- End blog header -->

<!-- End blog entry -->

ID, 'category', '', ' , ', ''); ?&gt; <!-- End footer info -->

&lt;a href=&quot;" class="second-btn"&gt; &#8250;</a> <!-- End blog footer --> <!-- End blog container -->

&lt;a href=&quot;" class="btn-more"&gt;+</a> <!-- End blog --> <!-- End blog list -->

<!-- End blog PAGINATION -->

<!-- End container --> <!-- End blog container -->

<i></i> <!-- End latest header -->

&lt;a href=&quot;" class="blog-post__thumb"&gt; ID,'post-latest-thumba')){echo get_the_post_thumbnail($post-&gt;ID,'post-latest-thumba');}else{echo '';} ?&gt; </a> <!-- End blog post thumb -->

&lt;a href=&quot;"&gt;</a>

<!-- End blog post header -->

<!-- End blog post body -->

ID, 'category', '', ' , ', ''); ?&gt; <!-- End footer info -->

&lt;a href=&quot;" class="second-btn"&gt; &#8250;</a> <!-- End blog post footer --> <!-- End blog post wrap --> <!-- End blog post --> <!-- End blog posts --> <!-- End left col -->

<i></i> <!-- End latest header -->

<!-- End date --> <!-- End date -->

&lt;a href=&quot;"&gt;</a> ID, 'event-category' ); if($cur_terms != '') { ?&gt; name.' '; } ?&gt; <!-- End event post header --> <!-- End event post wrap --> &lt;a href=&quot;" class="btn-more"&gt;+</a> <!-- End event post--> <!-- End Events posts --> <!-- End Right col --> <!-- End container --> <!-- End latest -->

Merci d'avance

gwen dit –

ah petit bug lors de la copie du code...

<!-- End page heading -->

&lt;a href=&quot;" class="breadcrumb__link"&gt;</a> <!-- End breadcrumb --> <!-- End wrap breadcrumb --> <!-- End container --> <!-- End page header -->

//la ligne suivante, vous l'avez déjà, ne la mettez donc pas deux fois, //il s'agit juste de placer le morceau ci-dessus avant la ligne qui suit

'505px','height'=&gt;'318px')); } else { if(get_the_post_thumbnail($post-&gt;ID,'post-list-thumba')){echo get_the_post_thumbnail($post-&gt;ID,'post-list-thumba');}else{echo '';} } ?&gt; <!-- End blog thumb -->

&lt;a href=&quot;"&gt;</a>

<!-- End meta --> <!-- End blog header -->

<!-- End blog entry -->

ID, 'category', '', ' , ', ''); ?&gt; <!-- End footer info -->

&lt;a href=&quot;" class="second-btn"&gt; &#8250;</a> <!-- End blog footer --> <!-- End blog container -->

&lt;a href=&quot;" class="btn-more"&gt;+</a> <!-- End blog --> <!-- End blog list -->

<!-- End blog PAGINATION -->

<!-- End container --> <!-- End blog container -->

<i></i> <!-- End latest header -->

&lt;a href=&quot;" class="blog-post__thumb"&gt; ID,'post-latest-thumba')){echo get_the_post_thumbnail($post-&gt;ID,'post-latest-thumba');}else{echo '';} ?&gt; </a> <!-- End blog post thumb -->

&lt;a href=&quot;"&gt;</a>

<!-- End blog post header -->

<!-- End blog post body -->

ID, 'category', '', ' , ', ''); ?&gt; <!-- End footer info -->

&lt;a href=&quot;" class="second-btn"&gt; &#8250;</a> <!-- End blog post footer --> <!-- End blog post wrap --> <!-- End blog post --> <!-- End blog posts --> <!-- End left col -->

<i></i> <!-- End latest header -->

<!-- End date --> <!-- End date -->

&lt;a href=&quot;"&gt;</a> ID, 'event-category' ); if($cur_terms != '') { ?&gt; name.' '; } ?&gt; <!-- End event post header --> <!-- End event post wrap --> &lt;a href=&quot;" class="btn-more"&gt;+</a> <!-- End event post--> <!-- End Events posts --> <!-- End Right col --> <!-- End container --> <!-- End latest -->

gwen dit –

bon bien ça ne marche pas...

gwen dit –

FAUSSE ALERTE problème résolu j'avai modifié l'url de l'article!...

Merci encore pour ce tuto au top!

axel dit –

Salut, Merci encore pour ce tuto, qui m'a servi plus d'une fois. Bye

jean dit –

bravo et merci pour cette page d'explication très utile

Buzut dit –

Merci de votre soutien Jean !

Laurent dit –

Bonjour et merci pour ces explications !

J'ai utilisé la première solution, cela fonctionne bien.

Cependant, dans la page live.php j'ai ajouté

... la boucle While...

mais la navigation vers les articles précédents ne fonctionne pas

De plus, sur ma page principale de mes actualités (index.php)... je ne peux pas aller vers mes articles précédents

Si vous avoulez une solution à mes 2 problèmes... je suis preneur ;-) Merci Laurent

Buzut dit –

Bonjour Laurent,

C'est difficile de diagnostiquer votre problème comme ça. Ces fonctions sont étroitement liées au thème utilisé. Pour la pagination, je vous conseille de jeter un œil à "Ajouter une pagination en bas des pages" de mon article sur le functions.php de Wordpress

carole dit –

bonjour ! je viens de tester la 1ere méthode (car le code c'est malheureusement pas du tout mon truc !!!), et c'est très bien ! Par contre, j'ai l'impression dans les blogs "secondaires" c'est à dire les pages dans lesquelles les articles sont aussi écrits, ils n'apparaissent pas du plus récent au plus ancien mais que le plus ancien reste le 1er.....est-ce normal ? Y-a-t-il encore une ruse que j'aurai raté ;-))) ??? Merci !!

Buzut dit –

Bonjour Carole,

Normalement, vous n'avez rien à faire pour cela. Tentez tout de même de trouver un plugin permettant de modifier l'ordre d'affichage des articles.

Simon dit –

Bonjour, je rencontre un problème avec la 3 ème méthode,

Sur la homepage ça fonctionne bien la catégorie est bien exclue mais sur la page qui doit afficher cette même catégorie, rien ne s'affiche du moins aucun, article car le nom de la page est bien présent

voici le code

publish; $total_pages = ceil( $published_post_count / $posts_per_page ); if ( "1" max_num_pages ); ?&gt; &lt;div id=&quot;post-" &gt; <!-- /post --> <!-- /posts --> max_num_pages &gt; 1 ) : ?&gt; &lt;?php echo get_next_posts_link( __(&#039;&laquo; Older posts', 'hemingway')); ?&gt; &lt;?php echo get_previous_posts_link( __(&#039;Newer posts &raquo;', 'hemingway')); ?&gt; <!-- /post-nav archive-nav --> <!-- /content.left -->

<!-- /wrapper -->

Simon dit –

J'ai foiré mon copier coller précédent :p

publish; $total_pages = ceil( $published_post_count / $posts_per_page ); if ( "1" max_num_pages ); ?&gt; &lt;div id=&quot;post-" &gt; <!-- /post --> <!-- /posts --> max_num_pages &gt; 1 ) : ?&gt; &lt;?php echo get_next_posts_link( __(&#039;&laquo; Older posts', 'hemingway')); ?&gt; &lt;?php echo get_previous_posts_link( __(&#039;Newer posts &raquo;', 'hemingway')); ?&gt; <!-- /post-nav archive-nav --> <!-- /content.left -->

<!-- /wrapper -->

Cassandra dit –

Coucou, j'ai un petit soucis je voulais essayer la méthode n°2 vu que tu dis que c'est la meilleure mais le soucis c'est que moi dans mon index.php j'ai que ça en code :

<!-- #content --> <!-- #main -->

A aucun moment je vois ecris if(have_posts()) :

Peux tu m'expliquer pk ? Merci de ton aide

Vincent dit –

Bonjour,

Je suis désolé, mais je bloque vraiment à l'etapge 1, au niveau de : "Vous n’avez plus qu’à cocher les catégories correspondantes dans vos articles pour qu’ils se « rangent » automatiquement sur la bonne page !" Serait il possible de me le détailler ? Merci beaucoup pour votre aide !..

Antonin

GillesD dit –

Bonjour, Pouvez-vous m'aider ? Par la force des choses, je suis confronté à ce problème et tombe par chance sur votre blog. WP ayant évolué depuis, je n'arrive pourtant pas à faire fonctionner la solution : "La technique royale : deux pages de blogs sur-mesure". J'ai pourtant tout suivi step by step. J'ai une page blanche

Le seul point que je puisse trouver est que j'ai un thème enfant avec le plugin "Divi Children" de divi4u.com Aucun d'autres fichiers PHP copiés dans le dossier du thème enfant Je suis en local : WampServer 3.0 Apache 2.4.17 PHP 5.6.16 MySQL 5.7.9 Une page d'accueil statique et une page Blog

J'ai dû passer par le plugin "Redirection" , mais comme vous le signaliez, les articles ne sont pas exclus de la page blog par défaut

Philip dit –

Bonjour,

Il est très compliqué de trouver une réponse quand on s’intéresse au problème des onglets (menu) et des pages sur WordPress : quand on effectue des recherches on se trouve vite confronté à une avalanche d’informations sur les liens, les pages et autres catégories qui finissent d’opacifier la question, si bien qu’après avoir parcouru la toile on ne sait plus ce que l’on cherchait, comme si l’on tournait autour du pot sans que personne ne dise clairement les choses...

Si j’ai bien compris, WordPress est une adaptation de blogs à des sites, aussi, chaque onglet du menu principal est associé à une page et une seule. Le problème, c’est lorsque l’on crée des sous onglets à l’intérieur d’une page, une fois lancé (appel vers des pages liées à la page parente), on ne sait plus à quel onglet du menu principal on se réfère, à moins d’utiliser des stratagèmes comme sur mon site : www.amis-museum.fr D’où ma question : est-il possible de lier les pages filles à l’onglet de référence de la page parente et de le maintenir activé ?

Merci par avance pour la suite donnée. Bien cordialement. Philip

Buzut dit –

Si je comprends bien, tu voudrais que l'onglet de la page parent (xx. Actualités) soit visuellement activé lorsque l'on se trouve sur une page enfant de cette même catégorie (ex. Actualités > Agenda) ?

Si c'est bien cela, il suffit dans l'admin de WordPress d'indiquer que la page "Agenda", pour reprendre notre exemple) ait "Actualités" comme page parente.

La doc de WordPress [en anglais] mentionne tout cela.

Philip dit –

Bonjour Buzut,

les lien d’héritage (parent) entre les pages principales du site (liées à un onglet éponyme) et leurs pages filles ont été réalisés, avec leur ordre de priorité. Dans l’exemple que tu cites, la page parent « Actualités », liée à l’onglet principal « Actualités », est liée à la page « Annonces », d’ordre 1, et la page « Agenda », d’ordre 2, et ainsi de suite pour les autres pages du site, liées entre elles d’une manière analogue.

Mon problème, donc, c’est que lorsque l’on clique sur l’onglet principal « Actualités », ce dernier s’active (passe au vert, ici :) et s’affiche la page correspondante (la page « Actualités »). Mais lorsque l’on sélectionne les sous onglets « Annonces » ou « Agenda », ce lien avec l’onglet principal « Actualités » n’est plus actif (repasse au blanc, ici) : d’où mon bandeau (situé au dessus des onglets secondaire) « Actualités - Annonces » et « Actualités - Agenda », tour de passe-passe qui pallie cette difficulté...

Je souhaiterais aussi qu’en activant les sous onglets Annonces et Agenda l’onglet principal Actualités reste activé... ce qui me permettrait de dégager ce bandeau qui alourdit l’entête de mes pages.

Suis je clair ?

Buzut dit –

Yes très clair, c'est ce qu'il m'avait semblé comprendre. Alors au niveau de l'admin WordPress, c'est très facile, tu as déjà fait tout ce qu'il fallait.

On voit d'ailleurs bien au niveau de l'url que "Annonces" et "Agenda" sont des enfants de "Actualités". Il faut maintenant que ton thème supporte les pages enfants.

Ton onglet est vert lorsque l'entrée correspondante du menu possède la classe current-menu-item. Pour que l'onglet soit vert aussi lorsque la page sélectionnée est un enfant, il faut que la règle CSS appliquée pour current-menu-item s'applique aussi lorsque l'onglet possède la classe current-page-ancestor.

Philip dit –

Merci, Buzut, pour ta réponse rapide. Je n’ai pas réalisé d’entrées pour « current-menu-item » dans mon CSS additionnel. Je peux, bien sûr, essayer de gratter de ce coté, mais pour gagner du temps, peut-être as tu une petite idée du code qu’il me faudrait implémenter pour réaliser la règle d’affectation que tu précises ? Merci par avance. Philip

Buzut dit –

Là c'est facile, il te suffit de localiser ta règle concernant les styles appliqués à .current-menu-item { … } et tu ajoutes current-page-ancestor de sorte que la règle devienne la suivante .current-menu-item, .current-page-ancestor { … }.

En théorie, c'est tout ce qu'il y a à faire. Cela dit, en informatique, la théorie est toujours différente de la pratique. Il y aura donc peut être un peu de debug 😉

Philip dit –

OK, merci Buzut. Je vois cela et transmettrai le code sur le site, pour un éventuel utilisateur confronté au même problème. A bientôt

Philip dit –

Bonsoir,

comme convenu, voici le code entré dans la partie CSS additionnel de WordPress, qui m’a permis de rattacher les onglets secondaires de mes pages à leurs onglets principaux respectifs (cf. échange ci-dessus) :

.current-menu-item a, .current-page-ancestor a, .current-post-ancestor a { background: green; // là on peut raffiner si l’on veut... }

Voyi voyou... Tout simplement... Merci Buzut et à bientôt.

Philip dit –

Bonjour Buzut, bonjour à tous, mon code fonctionne mais je rencontre un petit problème sur la page Boutique du Widget WooCommerce : Cette page propre à WooCommerce invalide la fonction héritage (dans mon cas, liaison de la page « Boutique » à sa page parent « Publications », et donc, l’onglet éponyme « Publications » n’est pas activé lorsque le sous onglet « Boutique » est activé (ex sur mon site témoin www.amis-museum/modele) Je souhaiterais savoir s’il n’y aurait pas une routine CSS ou PHP pour forcer ce lien d’héritage entre la page « Boutique » et sa page parent « Bulletins », dans mon site. Au niveau wordpress le lien a été créé mais n’est pas fonctionnel, et donc, ma routine (cf.supra), qui fonctionne sur mes autres pages, n’est pas efficiente pour cette page WooCommerce. Merci par avance pour la suite donnée. Philip

Philip dit –

Bonsoir à tous,

n’arrivant pas à trouver de solution pour recréer le lien d’héritage entre pages supprimé par le widget Woocommerce (page Boutique), j’essaie de contourner le problème en me fixant sur mon objectif premier, à savoir, activer un onglet dans ma barre des tâches.

J’ai donc opté pour un développement php en m’efforçant de créer un alias de la classe de mon onglet (class css : .menu-item-7206), activé lorsque s’ouvre la page Boutique (class css : .menu-item-3966), comme suit :

if (is_page(3966) ) { class_alias('menu-item-7206', 'publications'); echo 'class = "publications active"'; } else { echo 'class = "publications "'; }

// la class_alias est censée créer un alias de .menu-item-7206 (onglet)

// la nouvelle classe publications est utilisé dans le css : .publications

J’ai essayé avec d’autres dérivés de la fonction is_page : if (is_page ($page = 'Boutique')) // if (is_page( 'Boutique' ) ) // if( $post->ID == 3966) //if ($pageCurrent == 'Boutique') // if (is_page( '3966' ) ) // if (is_page(3966) ) sans succès.

Nb : dans mon CSS, lorsque j’utilise la classe « .menu-item-7206 », associée à mon onglet, j’arrive à obtenir ce que je veux ; mais hélas, cette modification reste permanente (car pas de conditions en CSS...), d’où l’alias en php avec la classe css « .publications », censée s’activer uniquement lorsque ma page Boutique ( .menu-item-3966) est activée/active.

Peut être auriez vous une idée ?

Seb dit –

Bonjour et merci pour cet article ! J'ai créé un template de page blog en utilisant la première technique et cela fonctionne ;) MAIS le fil d'ariane des articles figurant sur cette nouvelle page affiche toujours la page liée au blog initial. Exemple, ma page de blog initial s'appelle www.monsite.fr/journal. J'ai ma nouvelle page qui se nomme www.monsite.fr/projets. Si je clique sur un article figurant sur cette nouvelle page, le fil d'ariane affiche monsite/JOURNAL/categorie/monarticle. Comment faire pour que le fil d'ariane prenne en compte le nouveau chemin des articles monsite/PROJETS/categorie/monarticle ?

Apprendi wd dit –

Bonjour, J ai un thème astra non pro. En classant les articles par categories et en rajoutant des categories dans le menu d'apparence, j'obtiens bien l'effet souhaité mais les images ne s'affichent plus, ne reste que les textes.

Rejoignez la discussion !

Vous pouvez utiliser Markdown pour les liens [ancre de lien](url), la mise en *italique* et en **gras**. Enfin pour le code, vous pouvez utiliser la syntaxe `inline` et la syntaxe bloc

```
ceci est un bloc
de code
```