Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

Maitriser WP_Query : les Actions et les Filtres

by
Difficulty:IntermediateLength:ShortLanguages:
This post is part of a series called Mastering WP_Query.
Mastering WP_Query: Related Functions
Mastering WP_Query: Properties and Methods

French (Français) translation by Jean-Frédéric Barré (you can also view the original English article)

Bienvenue dans cette troisième partie de la série "Maitriser WP_Query". Dans le chapitre précédent, nous avons passé en revue les 13 fonctions différentes, liées à la classe WP_Query. Dans cette partie, nous allons voir les "hooks" de WordPress (des Filtres et des Actions) que vous pouvez utiliser avec WP_Query.

Allons y sans attendre !

Les Filtres liés à WP_Query

Dans le Codex, dans le chapitre consacré au filtres, il y a 16 filtres listés sous la dénomination "Filtres WP_Query". Dans ce chapitre nous allons les passer en revue. Ce chapitre sera assez cours car la plupart des filtres sont fonction de certaines clauses particulières de la requête faite par la classe WP_Query.

Nous y reviendrons, après avoir vu les filtres qui ne sont pas en lien avec ces "clauses" particulières.

Filtrer le nombre de post : found_posts

Ce filtre permet de spécifier un nombre de post renvoyé, sans prendre en compte l'argument post_per_page spécifié dans WP_Query.

Ce filtre est particulièrement utile pour créer des paginations. Voyons ce qu'en dit le Codex :

Par exemple, si vous déclaré une valeur de décalage dans votre requête, WordPress ne va PAS déduire le décalage grâce au paramètre $wp_query->found_posts parameter (si vous avez 45 posts affichable après un décalage de 10, WordPress va ignorer ce décalage et vous donner une valeur found_posts de 55).

Logique.

Filtrer la requête : found_posts_query

Le nombre d'éléments trouvés est calculé par la commande MySQL SELECT FOUND_ROWS() Ce filtre permet de modifier cette commande, au cas où vous auriez besoin de calculer le nombre d'éléments trouvés de manière différente.

Filtrer la requête SQL : post_request

Si vous désirez modifier la requête SQL, voici le filtre à utiliser. Ce filtre peut réécrire complètement la requête SQL faite par la classe WP_Query.

Filtrer les éléments retournés par la requête : posts_results

Si vous désirez modifier le tableau PHP généré par WP_Query, vous pouvez utiliser ce filtre. Voici un exemple très clair sur le Codex.

(Attention, notez bien que ce filtre prend en charge les données brutes générées par la requête SQL).

Filtrer le tableau des posts : the_posts

A la différence de posts_results, le filtre the_posts attend que la requête soit totalement retournée. Ainsi on peut vérifier dans le tableau si les posts sont publiés ou épinglés. Utilisez le si vous ne voulez pas de posts non-publiés dans vos résultats.

Filtrer la Field List (et la clause particulière SELECT ) : posts_fields

La clause SELECT d'une requête SQL détermine quel champs de la base de données sera sélectionné et ce filtre permet de les trier.

Filtrer la clause LIMIT : post_limits

La clause LIMIT d'une requête SQL définit les limites de la requête, et ce filtre permet de la trier.

La Clause DISTINCT de la requête de filtrage : posts_distinct

La clause DISTINCT d'une requête SQL indique que la requête doit retourner des résultats différents, et ce filtre permet de les trier. Naturellement, WP_Query ne retourne pas de résultats distincts mais lorsque vous utilisez ce filtre avec une fonction qui renvoie « DISTINCT », la requête sera ajustée pour retourner des résultats différents.

La Clause WHERE de la requête de filtrage : posts_where

La clause WHERE d'une requête SQL est utilisée pour filtrer les instructions MySqL : SELECT, INSERT, UPDATE ou DELETE, et ce filtre permet de les trier. Bien que la classe WP_Query fasse tout le travail nécessaire pour filtrer les résultats, vous pouvez aller plus loin en utilisant ce filtre.

Filtrer la Clause WHERE de la requête après le calcul de pagination : posts_where_paged

Ce filtre est un dérivé du filtre posts_where, que vous pouvez utiliser avec les requêtes de pagination.

Filtrage de la Clause WHERE d'une requête de recherche : posts_search

Ce filtre est un autre dérivé du filtre posts_where . Il permet de modifier la clause WHERE d'une requête utilisée pour obtenir des résultats de recherche..

Filtrage de la Clause JOIN : posts_join

La clause JOIN d'une requête SQL vous permet de travailler votre commande SQL au sein de plusieurs tables de base de données. C'est l'un des éléments avancés de MySQL, donc je ne recommande pas l'utilisation de ce filtre à moins que vous ne sachiez très bien comment fonctionne JOIN.

Filtrer la clause JOIN après que la page soit calculée : posts_join_paged

Tout comme posts_where_paged est une itération de posts_where, ceci est une itération du filtre posts_join qui travaille sur les requêtes de pagination.

Filtrer la clause ORDER BY  : posts_orderby

La clause ORDER BY d'une requête SQL réorganise l'ordre de la requête, et ce filtre permet de filtrer l'ordre.

Filtrage de la Clause GROUP BY de la requête : posts_groupby

La clause GROUP BY d'une requête SQL retourne des éléments « groupés » par champ de base de données et ce filtre permet de trier en fonction des groupes.

Filtrer toutes les clauses de la requête  : posts_clauses

Si vous voulez filtrer toutes les clauses dans le même temps, il y a aussi un filtre pour ça : posts_clauses. Ce filtre gère les clauses WHEREGROUP BYJOINORDER BY,DISTINCTSELECT, et LIMITS .

Les Actions liées à WP_Query

Maintenant que nous avons passé en revue les filtres associés à WP_Query, passons à l'autre type de hook : les actions.

Interférer avec la requête avant son exécution : pre_get_posts

Avant que la requête ne soit lancée, vous pouvez interagir avec elle (par exemple injecter des variables supplémentaire) à l'aide de cette action. Voyons un petit exemple de Tom McFarlin pour apprendre à exclure une catégorie de la boucle principale :

Gérer l'analyse de la requête : parse_query

Contrairement à pre_get_posts, qui intervient avec la requête avant que les variables de la requête ne soient définies, l'action parse_query gère le processus une fois définies les variables de requête. Par conséquent, vous devez utiliser cette action si vous voulez vérifier les variables actuelles et agir conformément à celles-ci.

Modifiez le Post Object : the_post

Le terme the_action est un peu déroutant car c'est le nom d'un hook d'action, une fonction liée à WP_Query et également une méthode de la classe WP_Query.

Cette action, comme le dit le Codex, nous permet de modifier l'objet du message immédiatement après être retourné et réglé. À l'aide de cette action, vous pouvez modifier directement ce qui est retourné. Voyons un exemple :

Fin de la troisième partie.

Les Actions et les filtres sont toujours un sujet intéressant à aborder. (Je sais pertinemment que mes deux séries sur les actions de WordPress et les Filtres WordPress ont ont été un plaisir à écrire et on reçu un bon accueil des lecteurs). J'espère que vous avez appréciez ce chapitre autant que j'ai pris de plaisir à l'écrire.

Envie d'ajouter des choses à cet article ? Laissez un commentaire ... Et, si vous avez apprécié cet article, n'hésitez pas à le partager !

Rendez-vous au prochain chapitre dans lequel nous parlerons des propriétés et méthodes de la classe WP_Query.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.