Comment utiliser la requête WP query pour l’affichage de vos articles

Dans un précédent article, je vous avais expliqué comment utiliser la fonction query_post pour personnaliser l’affichage de vos articles, ici je vais vous expliquer comment utiliser la requête WP_Query  avec quelques exemples de boucles personnalisées et un tableau avec toutes les possibilités de requête.


La requête WP_query

La requête WP_query est une boucle (The Loop)  qui est utilisée par WordPress pour afficher chacun de vos articles avec l’interprétation d’un tableau d’arguments qui traiteront tous les articles devant être affichés sur la page active avec des critères précis d’affichage catégorie, mots clés, identifiant, auteur….


La boucle contient du code html,  php et les marqueurs the_exerpt qui affichera un extrait de l’article the_title qui affichera le titre et the_permalink qui indiquera le lien dans la balise href de chaque article.


La requête Wp_query peut être utilisé dans les pages templates de votre thème elle peut-être placer n’import  où voici un exemple de la forme courte :

<?php

$the_query = new WP_Query('cat=0&showposts=2');

while ($the_query->have_posts()) : 
$the_query->the_post();

 		// Votre boucle 

?>

  <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>

  <p><?php the_excerpt();?></p>

<?php  // Votre boucle fin

endwhile;

?>

L’exemple ci-dessus est formulé comme pour requête query_post pour une insertion rapide d’une boucle sur votre page ou sidebar.


Maintenant passons a une forme plus développer rien de bien compliquer, il suffit de juste de savoir se que vous voulez afficher. Pour cela ont va utiliser $args un tableau d’arguments qui correspondra a une liste de conditions pour personnaliser l’affichage de vos articles.


Exemple :

<?php 

$args= array(

			'showposts' => 3,

			'cat' => 0,

			'orderby'  => 'rand'

			);

$the_query = new WP_Query($args);

while ($the_query->have_posts()) : 
$the_query->the_post();

  	   // Votre boucle 

?>

  <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>

  <p><?php the_excerpt();?></p>

<?php // Votre boucle fin

endwhile;

?>

Dans mon tableau arguments ci-dessus j’ai utilisé les conditions suivantes :


– showposts :  pour nombre d’article a afficher.

– cat : pour indiquer l’identifiant numérique de la catégorie de mes articles.

– orderby : pour avoir un ordre d’affichage aléatoire.


Important : Quant vous utilisez une liste d’arguments, chaque condition est séparée par une virgule.


Afficher des articles d’une catégorie avec un mot clé spécifique par date de parution descendante

Dans cet autre exemple, je voudrais une boucle qui m’affiche 5 articles de la catégorie voiture avec le mot clé rouge classé par date de parution descendante :

Je créer mon tableau d’arguments et j’y ajoute mes conditions :

<?php 

$args= array(

			'showposts' => 5, // nombre d'article 

			'category_name'  => 'voiture', // nom de la catégorie (identifiant sans accent et majuscule)

			'orderby'  => 'date', // ordre par date

			'order'  => 'desc', // ordre décendant

			'tag' => 'rouge' // mot clé (identifiant sans accent et majuscule)

			);

?>

Dans ce tableau d’arguments, je vais utiliser les conditions suivantes :


Showposts : pour le nombre d’articles

Category_name : pour indiquer quelle catégorie d’articles ( identifiant nom )

Orderby : pour trier mes articles par date

Oder : pour indiquer l’ordre d’affichage (ascendant ou descendant)

Tag : pour choisir les articles, qui seront affichés avec le mot clé rouge.


Et après ma boucle qui va interpréter mes conditions dans le tableau d’arguments :

<?php

$the_query = new WP_Query($args);

while ($the_query->have_posts()) : 
$the_query->the_post();

       // Votre boucle ici

?>

  <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>

  <p><?php the_excerpt();?></p>

<?php // Votre boucle ici fin

endwhile;

?>

Afficher des articles par post type.

Les custom post types de WordPress permettre de créer des types de contenu sur mesure et différent modèle d’article cet a dire différents éditeurs pour des sections spécifiques. L’usage des custom post types est de plus en plus répandus pour des sites professionnels.


Ici nous allons voir comment récupérer les articles d’un post type.

<?php

$args= array(

			'post_type' => 'post' // post type par défaut

			);

?>

<?php

$the_query = new WP_Query($args);

while ($the_query->have_posts()) :
 $the_query->the_post();

       // Votre boucle ici

?>

  <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>

  <p><?php the_excerpt();?></p>

<?php // Votre boucle ici fin

endwhile;

?>

Dans mon tableau d’arguments j’ai utilisé la condition post_type pour indiqué quel type d’article je voulais récupérer dans cet exemple j’ai indiqué post qui l’éditeur par défaut des articles dans wordpress, vous pouvez remplacer post par votre post_type exemple : football, athlétisme, tennis….



Si je voulais récupérer un extrait de mes pages j’utiliserais le même tableau d’argument avec la même condition en remplaçant post par page:

<?php

$args= array(

			'post_type' => 'page' // post type par défaut pour les pages

			);

?>

Plusieurs boucles sur la même page

Dans le cas où vous voulez créer une page avec plusieurs boucles avec des tableaux d’arguments et différentes conditions il est important de rajouter cette fonction wp_reset_postdata à la fin de vos boucles après le endwhile comme ceci :

<?php

endwhile;

?>

<?php wp_reset_postdata(); ?>

La fonction wp_reset_postdata va tous simplement restaurer les valeurs par défaut de la requête WP_query de façon à ce que les tableaux d’arguments et les conditions de chaque boucle ne rentrent pas en conflit et vous génère des erreurs d’affichage.


Conclusion

La requête WP_query peu s’utiliser de manière très simple si vous démarré un nouveau blog avec peu d’articles, mais elle peu s’avérer très utile dans l’évolution de votre blog si il contient un très grand nombre d’articles classés dans plusieurs catégories, post type, mots clé …. Et offre beaucoup de possibilité d’affichage pour une page d’accueil, un index ou dans votre sidebar.

Le fait de clarifier l’affichage de vos articles avec la requête WP_query permettra une navigation plus simple pour vos internautes.


[member]
Tuturiel WP query.zip
[/member]

Utiliser la fonction query_posts pour personnaliser l’affichage de vos articles

Aujourd’hui nous allons voir comment fonctionne la fonction query_posts, qui nous servira dans d’autres tutoriels.

Tout d’abord a quoi peu bien nous servir cette fonction ?

La fonction query_posts peu nous servir a personnalisé une page d’accueil par exemple :

Admettons qu’ont veuillent insérer plusieur boucle (loop) différente  sur notre page d’accueil de notre site :

Un entête avec une boucle contenant les cinq articles de la catégorie Nouveauté.

Ce qui nous donneraient avec la fonction query_posts :


// début de la boucle avec la fonction query_post

<?php query_posts('cat=2&showposts=5'); while (have_posts()) : the_post(); ?>

<?php the_content(); ?>// affiche du contenu de votre article

<?php endwhile; ?> // fermeture de la boucle

Ici dans cette boucle j’ai indiqué a la fonction query_post que je voulais afficher la catégorie Nouveauté qui a pour identifiant  2 (cat=2) et (&) les 5 articles récent de cette catégorie (showpost=5). Voila un exemple simple de la fonction query_posts elle peu faire bien plus de choses voyons ca en détail.


Query_posts et les catégories de vos articles.

Cat et category_name pour afficher les catégories désirer.

query_posts("cat=2"); //Affiche  les articles de la catégorie qui a pour identifiant 2

query_posts("cat=-2"); //Retire la catégorie qui a pour identifiant 2

query_posts("category_name=nouveaute"); //Affiche les articles de la catégorie "nouveaute"

query_posts("cat=1,2,4"); //Affiche un série de catégories qui ont pour identifiant 1,2,4

A noter dans le code ci-dessus vous avez le choix avec l’identifiant de la catégorie, vous avez l’ID qui se récupère dans la barre d’adresse :

http://…../edit-tags.php?action=edit&taxonomy=category&tag_ID=2&post_type=post

Ou

L’identifiant normalisé du nom de votre catégorie qui est obtenu lorsque vous créer une catégorie exemple :

Nouveauté = nouveaute. Dans se cas ont utilisera category_name=nouveaute. L’identifiant normalisé du nom de votre est plus pratique si par exemple vous créer une page d’accueil avec plusieurs boucle cela vous permet de vous repérez plus facilement dans le code ou chaque catégorie est afficher.


Afficher un article unique

P= et name va permettre l’affichage d’un seul article

query_posts('p=10'); //Affiche l'article avec l' identifiant 10

query_posts('name=titre-de-mon-article'); //Affiche l'article avec identifiant normalisé "titre-de-mon-article"

Idem que pour les catégories ont pourra utiliser l’identifiant :

http://…./post.php?post=692&action=edit&message=10

Ou

L’identifiant normalisé qui est le titre de votre article il est obtenu lors de l’édition de l’article sous le titre vous avez permalien : http://…/titre-de-mon-article et l’identifiant sera : name=titre-de-mon-article


Afficher une page unique

Page et pagename va permettre l’affichage d’une seule page

query_posts("page_id=4"); //Affiche la page avec l' identifiant 4

query_posts("pagename=contact"); //Affiche la page avec l’identifiant normalisé "contact"

Mais quel intérêt a affiché une page ? Cela pourrait servir dans le cas ou voulez par exemple afficher un formulaire de contact visible directement en page d’accueil.


Déterminer le nombre d’article a affiché

Showpost et offset va permettre d’afficher le nombre d’article désiré.

query_posts('showposts=7'); //Affiche les 7 premiers articles

query_posts('offset=2');//On exclu les 2 premiers article

Showpost va indiquer que vous voulez afficher que 7 articles d’une catégorie, il  affichera les articles par ordre de parution vous pouvez modifier aussi l’ordre d’affichage :

query_posts('orderby=post_date&order=desc')

orderby modifie l’ordre d’affichage :

post_date – Trier par date de poste (qui est la valeur par défaut).

post_author – Trier par l’auteur.

post_title – Trier par titre.

post_modified – Trier par date de modification.

post_menu_order – Trier par ordre des menus .

post_parent – Trier par parent.

post_id – Trier par ID.

post_rand – un ordre aléatoire.

Order ici ont affichera les articles par ordre décédant  order=desc pour les affiché dans un ordre ascendant ont utilisera order=asc qui est la valeur par défaut.

vous pouvez obtenir plus d’information sur le codex wordpress

Offset permet de retirer des articles que vous vous pas affichez, prenons  un exemple :

Vous avez créé une page pour une catégorie d’articles en entête vous voulez affichez le dernier article de cette catégorie et en dessous vous voulez affichez une liste de dix articles de la même catégorie :


La boucle pour afficher le dernier article de la catégorie sera :

<?php query_posts('cat=2&showposts=1'); while (have_posts()) : the_post(); ?>// début de la boucle

<?php the_content(); ?>// affiche du contenu de votre article

<?php endwhile; ?> // fermeture de la boucle

La boucle pour afficher les dix autres articles de la même catégorie sera :

<?php query_posts('cat=2&showposts=10&offset=1'); while (have_posts()) : the_post(); ?>// début de la boucle

<?php the_content(); ?>// affiche du contenu de votre article

<?php endwhile; ?> // fermeture de la boucle

Dans la première boucle j’ai combine cat=2 qui est l’identifiant de ma catégorie  et(&) showpost=1 qui indique que je veux qu’un seul article (le dernier publier dans la catégorie).

Dans ma deuxième boucle j’ai combiné cat=2 qui est l’identifiant de ma catégorie  et(&) showpost=10 qui indique que je veux afficher dix articles et(&) offset=1 retire le premier article (( le dernier publier dans la catégorie).

Voila a quoi peu servir la fonction quey_post.


Voici une liste des fonction query_posts et que vous pouvez combiné selon vos besoins.

query_posts("tag=voiture"); //Affiche les articles qui ont le tag (mot clé) "voiture"

query_posts("tag=voiture,vert"); //Affiche les articles qui ont le tag (mot clé) "voiture" OU "vert"

query_posts("tag=voiture+vert+marque"); //Affiche les articles qui contiennent les 3 tags( mots clé)

query_posts("author_name=auteur-m,admin"); //Affiche les articles de l'auteurs "auteur-m" et "admin"

query_posts("author=6"); //Affiche les articles de l'auteur avec l'identifiant 6

query_posts("author=-8"); //Exclu les articles de l'auteur avec l'identifiant 8

query_posts("hour=01"); //Affiche les articles qui ont été publiés pendant l'heure 1

query_posts("minute=30"); //Affiche les articles qui ont été publiés pendant la 30ème minute

query_posts("second=07"); //Affiche les articles qui ont été publiés pendant la 7ème seconde

query_posts("day=1"); //Affiche les articles qui ont été publiés le 1er jour de la semaine

query_posts("monthnum=1"); //Affiche les articles qui ont été publiés pendant le 1er moi

query_posts("year=2010"); //Affiche les articles qui ont été publiés pendant l'année 2010

query_posts("posts_per_page=10"); //Affiche 10 articles par page

Conclusion

La fonction query_posts est très utile si ont veut personnaliser son site  créer une page d’accueil, une page pour une catégorie d’article…. et bien d’autre, et sa vous permet de vous initiez au codage de wordpress et a sont fonctionement.