Rigueur. Et passion !

Ne dites pas à ma mère que je suis artisan en architecture de l'information appliquée aux sites web : elle croit que je suis webdesigner, intégrateur HTML & CSS, rédacteur web, formateur NTIC et consultant en webmarketing depuis 2001 ! Voulez-vous en savoir plus ?

Le blog de l'intégrateur web

WordPress : astuces pour afficher une page "autonome" avec wp_list_pages()

Tandis que fran6 s’interrogeait sur la création d’une page statique comme page d’accueil d’un blog WordPress, je me demandais comment créer une page prestations.php (teasing inside) affichant certaines catégories de billets dans une maquette spécifique. Je parle d’une page utilisant les boucles WordPress se suffisant donc à elle-même, et pas d’un Modèle de Page à remplir ultérieurement. Tout en sachant que j’ai besoin que cette page soit considérée comme une Page afin d’apparaître avec le marqueur wp_list_pages()

Avant d’arriver à définir ce besoin, j’ai commencé bille en tête par faire la page prestations.php que j’ai tenté d’afficher directement avec…

<?php include (TEMPLATEPATH . '/prestations.php'); ?>

…avant de me rendre compte que si le fichier en question n’était pas parsé par le moteur de WordPress via l’URL, il n’y avait aucune chance pour que les billets en question s’affichent ^_^

Création de la Page autonome

Cette notion fondamentale étant rappelée, comment faire ? J’ai simplement procédé par étapes : dans le panel d’administration de WordPress, j’ai créé une nouvelle page avec Prestations comme titre, j’ai sélectionné ensuite le modèle de page Prestations qui apparait lorsqu’on ajoute le marqueur qui va bien en haut de la page :

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

Et là, comme je n’avais rien à saisir de plus (le contenu étant censé s’afficher avec les boucles WP), je l’ai enregistré sans rien ajouter d’autre (le billet doit rester vide). Je me suis dit que sur un malentendu, ça pouvait marcher ;)

Et ça marche ! La page prestations.php, qui contient deux boucles pour afficher deux catégories de billet l’une en dessous de l’autre, apparaît avec les autres Pages et son contenu s’affiche parfaitement. WordPress a simplement besoin d’un nom de Page dans sa base de données pour la parser lorsqu’elle apparaît dans l’URL.

Rappels pour afficher deux catégories de billets dans deux boucles sur la même page

Pendant que j’y suis, voici quelques lignes présentes dans prestations.php pour afficher les 3 derniers billets de la catégorie « blog-pro », par exemple :

<div class="content primary-content">
    <?php query_posts('category_name=blog-pro&showposts=3'); ?>
        <?php while ( have_posts() ) : the_post() ?>
            [Le reste de la boucle ici]
        <?php endwhile ?>
</div><!-- end .content .primary-content -->

Voici maintenant les 3 derniers billets de la catégorie « prestations » :

<div class="content secondary-content">
    <?php query_posts('category_name=prestations&showposts=3'); ?>
         <?php while ( have_posts() ) : the_post() ?>
            [Le reste de la boucle ici]
        <?php endwhile ?>
</div><!-- end .content .secondary-content -->

Voilà, tout est dans la fonction query_posts() qui permet de faire une requête à la base de donnée en remettant les compteurs à zéro, ce qui permet une souplesse inégalable dans l’élaboration des templates.

Articles sur le même sujet

PS : Le respect de la vie privée sur internet est important : j'ai décidé d'échanger mon bouton Like de Facebook par un bouton Faire un don de Paypal car
Il n'y pas d'amour, il n'y a que des preuves d'amour (Jean Cocteau) ;) Merci d'avance.

Afin de satisfaire le plus grand nombre, j'ai ajouté
un bouton Flattr parce que vous le valez bien ;)



33 commentaires pour “WordPress : astuces pour afficher une page "autonome" avec wp_list_pages()”

  1. Fran6 dit :

    Et oui, pas si facile que ça, la vie en WordPress !! ;-) Mais le sujet n’est pas encore clos puisque je vais en rajouter une couche dans la semaine. J’hésiterai pas à parler de ton article vraiment très intéressant et qui apporte une pierre de plus à l’édification de WordPress en CMS….;-)

  2. br1o dit :

    fran6 > Merci, au fait, je suis passé voir tes oeuvres sur flickr : j’aime beaucoup !
    a++

  3. Fran6 dit :

    Merci pour ton soutien ! ;-)

  4. HakunaMatata dit :

    J’ai essayé ton truc mais je n’obtiens rien, j’ai crée une page avec comme titre "actu" un fichier template avec comme template name : "actu" actu.php, visible dans mon editeur de theme mais rien alors que j’ai copié colle le contenu de pages.php dedans… et j’ai mis la page en page d’accueil…

    peut etre qu’il ya un truc pour attaché la page au fichier ?

    merci

  5. br1o dit :

    HakunaMatata > As-tu bien sélectionné actu.php dans le menu déroulant "Modèle de page" lors de la création de ta page ?

    Tiens-moi au courant ;)

  6. Hegyz dit :

    Génial ce petit tuto, je cherchais depuis 2 semaines à créer une liste de mes pages dans une page… grâce à toi et à fran6art.com, j’ai réussi..

    Longue vie et prospérité !!!!

  7. marc dit :

    Bonjour, J’ai essayé pour ma part de créer une page d’affichage spécifique type blog. J’ai donc nommé blog.php, je l’ai glisser dans le doss de mon template. J’ai fait exactement ce que tu as dit, mais ca n’affiche pas correctement. Pourtant si je prend le contenu de blog.php et que je le colle par ex dans archive.php, la pas de soucis..

    Ce que je veux c’est créer un lien dans mon menu qui affiche tous les posts en mode « blog » donc 1 colonne, au lieu des 3 de mon template. Comment faire?

    Merci

  8. Bruno Bichet dit :

    Salut @marc : est-ce que tu as bien ajouté le commentaire <?php /* Template Name: Prestations */ ?> en haut de blog.php ? Et si oui, ce template apparait-il bien comme modèle de page dans l’admin lors de la création de la page ?

  9. marc dit :

    oui il apparait dans les modeles de pages. cf la page concernée : http://generationsfm.com/streetblogger/blog

    merci

  10. dalla dit :

    bonjour, je cherche un peu la même chose pour les articles. comment afficher un certain nombre d’article d’une catégorie mère sans afficher les articles des autres catégories comprisent dans cette catégorie mère… merci à vous pour toutes ces infos…

  11. Tox dit :

    Salut, j’ai un peu du mal à comprendre,

    par exemple je veux afficher ma page toto.php (qui contient des boucles WP) sur mon site à cette adresse : http://www.site.com/toto.php, mais je veux qu’il soit parser WordPress qui est situé ici http://www.site.com/blog/

    Est-ce bien de celà que tu parles ? Est-ce que c’est possible ?

  12. Bruno Bichet Intégrateur Web dit :

    @Tox — Ce billet ne traite pas de ce dont tu parle. Sans avoir testé ton exemple, je serais étonné que cela soit possible car ta page toto.php ne devrait pas être accessible via le moteur de wordpress si ce dernier est situé dans un autre répertoire.

    • Tox dit :

      D’accord, donc il faut absolument que je crée la page toto.php est que je lui mette pour qu’elle apparaisse dans les modèles de page ?

      Ensuite je crée une page dans WP avec ce modèle et je l’affiche ?

  13. Tox dit :

    Super :)

  14. Jules dit :

    Salut Bruno,

    J’arrive pas à exécuter ton tuto…

    1/ J’ai modifier ma page php en incluant

    2/ Je créer une page (duplicata de mon index) que je place sous le modèle links

    3/ je tape http://www.monadresse.com/links.php = Not found !! Je peux juste accéder par /links/

    Comment faire docteur ?

    • Bruno Bichet Intégrateur Web dit :

      Bonjour Jules,

      A première vue, tout est normal et il s’agit du comportement attendu. Si tu crée une page « contact » dans WordPress, tu ne pourras pas plus y accéder via « contact.php ». Pour les pages créées à la « main », c’est à priori la même chose.

      Donc, pas besoin de docteur, puisqu’il n’y a pas de maladie ;)

      • flo dit :

        Bonsoir,

        j’ai essayé de suivre votre tutoriel qui est pourtant très clair, mais il ne me trouve pas la page: -j’ai crée une nouvelle page (dupliqué index.php et renommé en « test.php ») -j’ai inséré le code de template « test » -j’ai crée dans le header mon menu (en dur), avec comme un des liens « http://monsite.com/test » et ça m’affiche ma page index avec le résultat de la recherche, Introuvable.

        Franchement je galère, merci de votre aide.

  15. Jules dit :

    Merci Bruno,

    Donc si je comprend bien, il est impossible de créer une page avec le .php en pouvant l’administrer depuis wordpress. C’est ça ?

  16. oziks dit :

    Merci pour le tuto, exactement ce que je cherchais !!

  17. patrice dit :

    Merci, moi qui galère avec ça, je vais tester ça de suite

  18. Leytiel dit :

    Bonjour, Merci à ceux qui ont posté ce tuto. j’ai essayé de l’exécuter mais j’ai un problème. Tout marche bien avec ma page modèle de page jusqu’à ce que je choisi dans le tableau de bord réglages->lecture cette « page modèle » comme pages des articles. elle se désactive et m’affiche ma page par défaut. merci d’avance de votre aide

  19. Bruno Bichet dit :

    @Leytiel — A priori c’est normal puisqu’une page des article est en fait un « billet » et non une « page ». Essaie de choisir Réglage > lecture > une page statique > Page d’accueil (en choisissant la page personnalisée). Si cela ne fonctionne pas, il reste toujours la possibilité de renommer cette page en home.php afin qu’elle s’affiche en page d’accueil.

  20. Leytiel dit :

    Bonjour, merci de votre réponse. justement ce que je veux éviter. au fait j’ai une page actualité dans la quelle je veux inserer mes articles et que son modéle de page soit different de celui par défaut. avez vous une solution a me proposer??? merci d’avance

  21. Bruno Bichet dit :

    @Leytiel — Si j’ai bien compris la question, ça n’a rien à voir avec une page personnalisée mais avec une catégorie s’affichant différemment des autres.

    Pour une catégorie intitulée news, il faut créer une page category-news.php (à partir de wordpress 2.9, sinon, il faudra utiliser la forme category-6.php, si les news possèdent l’ID 6)

  22. Leytiel dit :

    j’obtiens toujours le même problème j’ai crée category-news.php voici ce que j’ai mis dedans.le problème n’arrive que lorsque je choisi cette page comme page des articles. merci d’avance.

    <?php
    

    //Les IDs de vos catégories $display_categories = array(1,2,3); foreach ($display_categories as $category) { //showposts = le nombre d’articles à afficher par catégorie query_posts(« showposts=2&cat=$category »); $wp_query->is_category = false; $wp_query->is_archive = false; $wp_query->is_home = true; ?> <a href=" »>

    <!--Le loop WordPress-->
    <?php while (have_posts()) : the_post(); ?>
        <h5><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h5>
        <a href="<?php the_permalink() ?>" rel="bookmark"></a>
        <?php the_excerpt(); ?>
        <?php endwhile; ?>
    

  23. Bruno Bichet dit :

    @Leytiel — Si j’ai bien compris, tu veux afficher un article précis comme page d’accueil, le tout avec une mise en page spécifique. Le problème, c’est que l’option du choix du billet dans réglage, etc. ne concerne pas le template que tu as créé, mais uniquement le billet. Je crois que la création d’un fichier home.php contenant ton modèle de « page » est la meilleure solution.

  24. Leytiel dit :

    Donc si j’ai bien compris je remplace mon index.php par home.php ? ou bien home.php sera un modèle ?

  25. Bruno Bichet dit :

    @Leytiel — il vaut mieux garder index.php et considérer home.php comme un modèle

  26. x dit :

    C’est quoi le :

    « marqueur qui va bien »?

    merci

Laissez un commentaire

Vous pouvez utiliser les balises HTML suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Les commentaires sont publiés sous votre pleine et entière responsabilité et ne doivent pas contrevenir aux lois et règlementations en vigueur. Les propos racistes ou antisémites, diffamatoire ou injurieux, divulguant des informations fausses, relatives à la vie privée d'une personne ou utilisant des oeuvres protégées par les droits d'auteurs ne sont pas les bienvenus et seront modérés sans modération.

Merci d'être constructif et n'oubliez pas : « sans la liberté de ramer il n'est point d'éloge flotteur ! »



Colophon

css 4 design est une publication irrégulomadaire à tendance hebdomadaire
éditée par Bruno Bichet qui carbure à WordPress et au café équitable.
Tous droits réservés © 2006 - 2011.

Contactez l'auteur du site

Google Analytics Alternative