WP_Query Arguments Statut, Ordre et Pagination

Dans cette partie de la série sur le mastering WP_Query, vous en apprendrez plus sur certains des arguments que vous pouvez utiliser avec le WP_Query classe, à savoir ceux pour:

  • statut
  • ordre
  • pagination

Vous pouvez utiliser ces arguments pour extraire des publications programmées de la base de données, interroger des pièces jointes, modifier la manière dont les publications sont classées et leur classement, pour spécifier le nombre de publications affichées et bien plus encore.

Mais avant de pouvoir le faire, vous devez comprendre le fonctionnement des arguments dans WP_Query.

Récapitulation du fonctionnement des arguments dans WP_Query

Avant de commencer, récapitulons brièvement le fonctionnement des arguments dans WP_Query. Quand vous codez WP_Query Dans vos thèmes ou plugins, vous devez inclure quatre éléments principaux:

  • les arguments de la requête, en utilisant des paramètres qui seront abordés dans ce tutoriel
  • la requête elle-même
  • la boucle
  • terminer: fermer les balises if et while et réinitialiser les données post

En pratique, cela ressemblera à quelque chose comme ceci:

have_posts ()) // Commence à boucler sur les résultats de la requête. while ($ query-> have_posts ()) $ query-> the_post (); // Le contenu des résultats postés interrogés est disponible ici.  // Restaure les données de publication d'origine. wp_reset_postdata (); ?>

Les arguments sont ce qui indique à WordPress quelles données extraire de la base de données et ce sont celles que je vais couvrir ici. Nous nous concentrons donc sur la première partie du code:

$ args = array (// Arguments pour votre requête.);

Comme vous pouvez le constater, les arguments sont contenus dans un tableau. Vous apprendrez à les coder au fil de ce didacticiel..

Coder vos arguments

Il existe un moyen spécifique de coder les arguments du tableau, comme suit:

$ args = array ('paramètre1' => 'valeur', 'paramètre2' => 'valeur', 'paramètre3' => 'valeur');

Vous devez mettre les paramètres et leurs valeurs entre guillemets simples, utilisez => entre eux, et séparez-les avec une virgule. Si vous vous trompez, WordPress peut ne pas ajouter tous vos arguments à la requête ou vous pouvez obtenir un écran blanc..

Paramètres d'état

Comme vous le savez si vous avez déjà converti le statut d'une publication de Brouillon à Publié, ou si vous le mettez peut-être à la corbeille, WordPress attribue un statut à chaque publication. Vous pouvez utiliser le post_status paramètre permettant de rechercher des publications ayant un ou plusieurs statuts.

Les arguments disponibles sont:

  • publier: Un article publié ou une page.
  • en attendant: Publication en attente de révision.
  • Brouillon: Un poste en statut brouillon.
  • auto-draft: Un article nouvellement créé, sans contenu.
  • futur: Un article à publier dans le futur.
  • privé: Non visible pour les utilisateurs non connectés.
  • hériter: Une révision.
  • poubelle: Le message est à la poubelle.
  • tout: Récupère tous les statuts sauf ceux des statuts de poste avec 'exclude_from_search' mis à true (c'est-à-dire. poubelle et auto-draft).

Si vous ne spécifiez pas de statut dans vos arguments de requête, WordPress utilisera par défaut publier; si l'utilisateur actuel est connecté, il inclura également les publications ayant le statut privé. Si vous exécutez une requête dans les pages d’administrateur, WordPress inclura également les statuts protégés, qui sont: futurBrouillon et en attendant par défaut.

Supposons donc que vous exécutez un site d'événements et que vous utilisez un type d'événement personnalisé, en utilisant la date de publication comme date de l'événement. Par défaut, WordPress n’affiche pas les événements qui ne se sont pas encore produits: bien que vous les ayez programmés, leur date est ultérieure et leur statut est ultérieur..

Pour contourner cela, utilisez simplement ces arguments:

$ args = array ('post_type' => 'event', 'post_status' => 'future');

Cela affichera uniquement les événements qui ne se sont pas encore produits, car ceux-ci auront la publier statut. Mais si vous souhaitez également afficher les événements survenus, vous pouvez utiliser un tableau de statuts de publication pour en inclure plusieurs:

$ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'));

le post_status Ce paramètre est essentiel lorsque vous interrogez des pièces jointes. C’est parce qu’ils ont le statut de hériter, ne pas publier. Donc, pour interroger toutes les pièces jointes, vous utiliseriez ceci:

$ args = array ('post_type' => 'pièce jointe', 'post_status' => 'inherit');

Sinon, vous pouvez remplacer hériter avec tout ce qui aurait le même effet.

Paramètres de commande

Vous utilisez deux paramètres pour commander les articles récupérés par WP_Query: ordre et commandé par. Comme vous vous en doutez, ordre définit l'ordre dans lequel les articles seront publiés dans la boucle, et commandé par définit quel champ dans la base de données ils seront triés par.

Commençons par examiner les arguments en faveur de ordre.

Le paramètre d'ordre

Il n'y a que deux arguments que vous pouvez utiliser pour cela:

  • ASC: ordre croissant des valeurs les plus basses aux valeurs les plus élevées (1, 2, 3; a, b, c).
  • DESC: ordre décroissant des valeurs les plus élevées aux valeurs les plus basses (3, 2, 1; c, b, a).

Ce sont assez explicites. Si vous n'incluez pas d'argument pour ordre, WordPress sera par défaut à DESC.

Le paramètre orderby

Vous pouvez trier vos messages en fonction de divers champs:

  • aucun: Aucune commande (disponible avec la version 2.8).
  • ID: Commande par identifiant postal. Notez la capitalisation.
  • auteur: Commander par auteur.
  • Titre: Trier par titre.
  • prénom: Commande par courrier.
  • type: Commande par type de poste.
  • rendez-vous amoureux: Trier par date.
  • modifié: Commandez par date de dernière modification.
  • parent: Commander par courrier / page parent id.
  • rand: Ordre aléatoire.
  • compteur de commentaire: Ordre par nombre de commentaires.
  • menu_order: Commande par page Utilisé le plus souvent pour Pages (en utilisant la valeur que vous ajoutez à la métabox dans l'écran Éditer la page) et pour les pièces jointes (en utilisant les champs entiers dans la boîte de dialogue Insérer / Transférer une galerie multimédia), menu_order activée.
  • meta_value: Trier par la valeur d'une clé méta (ou d'un champ personnalisé). Cela ne fonctionne que si vous incluez également un meta_key paramètre dans vos arguments. Les méta-valeurs sont triées par ordre alphabétique et non numérique (ainsi, 34 viendra avant 4, par exemple). 
  • meta_value_num: Trier par méta valeur numérique. Comme avec meta_value, vous devez également inclure un meta_key argument dans votre requête.
  • post__in: Conserver l'ordre de post-ID donné dans le post__in tableau.

La valeur par défaut est rendez-vous amoureux, c'est-à-dire la date à laquelle un article a été publié.

Ainsi, par exemple, si vous souhaitez trier vos articles par titre dans l'ordre croissant, utilisez les arguments suivants:

$ args = array ('orderby' => 'title', 'order' => 'ASC');

Commande par champs multiples

Vous n'avez pas à vous en tenir à un seul champ pour trier vos messages. Pour trier par plusieurs champs, vous utilisez un tableau avec le commandé par paramètre et (éventuellement) avec le ordre paramètre si vous voulez trier chaque champ dans un ordre différent.

Supposons donc que vous souhaitiez utiliser le champ de classement que vous souhaitez utiliser pour le tri sur un site de commerce électronique. Vous pouvez trier par note puis par titre, les deux dans l'ordre croissant, de cette façon:

$ args = array ('orderby' => array ('meta_value_num', 'title'), 'order' => 'ASC', 'meta_key' => 'rating');

Notez que j'ai inclus le meta_key argument pour que WordPress sache quel champ personnalisé j'utilise. Vous faites cela à cause de la façon dont les magasins WordPress affichent des métadonnées: pas dans la wp_posts table, mais dans le wp_postmeta table.

Mais que se passe-t-il si vous souhaitez classer par ordre décroissant, puis le titre par ordre croissant? Vous utilisez simplement un autre tableau:

$ args = array ('orderby' => array ('meta_value_num', 'title'), 'order' => array ('DESC', 'ASC'), 'meta_key' => 'rating');

Vous pouvez également trier selon plusieurs champs lorsque vous n'utilisez pas les métadonnées de publication, par exemple pour trier par type de publication, puis par date:

$ args = array ('orderby' => array ('type', 'date'), 'order' => array ('ASC', 'DESC'));

Cela trierait par type de poste dans l'ordre croissant, puis dans chaque type de publication, par date dans l'ordre décroissant..

Paramètres de pagination

La prochaine série de paramètres que nous en venons concerne la pagination. Ils vous aident à définir le nombre de messages qui seront interrogés et le fonctionnement de la pagination lors de leur sortie..

Les paramètres disponibles sont:

  • nopaging (booléen): Afficher tous les articles ou utiliser la pagination. La valeur par défaut est 'faux', c'est-à-dire utiliser la pagination.
  • posts_per_page (int): Nombre de messages à afficher par page.
  • posts_per_archive_page (int): Nombre de messages à afficher par page sur les pages d'archives uniquement.
  • décalage (int): Nombre de messages à déplacer ou passer.
  • paginé (int): La page de l’archive où sont affichés les messages.
  • page (int): Nombre de pages pour une page de garde statique. Afficher les messages qui seraient normalement affichés uniquement à la page X d'une page de garde statique.
  • ignore_sticky_posts (booléen): Ignorer les valeurs post-adhésivité-défaut faux.

Voyons quelques exemples. 

Nombre de postes et postes compensatoires

Par exemple, pour afficher les cinq publications les plus récentes:

$ args = array ('posts_per_page' => '5');

Ou pour afficher cinq messages récents, à l’exclusion du plus récent:

$ args = array ('posts_per_page' => '5', 'offset' => '1');

Notez que bien que vous récupériez les publications des six publications les plus récentes de la base de données, vous utilisez quand même 'posts_per_page' => '5' comme c'est le nombre de messages qui seront produits.

Pour aller un peu plus loin, vous pouvez écrire deux requêtes: une pour afficher le message le plus récent et une seconde pour afficher dix autres messages, à l'exclusion de ce message:

$ args = array ('posts_per_page' => '1'); // La requête et la boucle vont ici ainsi que la réinitialisation des posts. $ args = array ('posts_per_page' => '10', 'offset' => '1'); // Deuxième requête, boucle et réinitialisation, cliquez ici.

Vous pouvez aussi utiliser posts_per_page afficher tout des postes:

$ args = array ('posts_per_page' => '-1');

Postes collants

Normalement, vos messages collants apparaîtront en premier dans toute requête: si vous souhaitez remplacer cette fonction, utilisez ignore_sticky_posts:

$ args = array ('posts_per_page' => '5', 'ignore_sticky_posts' => true);

Les arguments ci-dessus renverront les cinq publications les plus récentes, qu'elles soient collantes ou non..

Notez que si vous souhaitez afficher uniquement les posts collants, vous devez utiliser le get_option () fonction et la post__in argument comme suit:

$ sticky = get_option ('sticky_posts'); $ args = array ('posts_per_page' => '5', 'post__in' => $ collant);

Ce qui précède afficherait les cinq derniers messages collants: s'il y a moins de cinq (par exemple trois) messages collants, les messages non collants ne seront pas affichés, mais uniquement les trois plus récents..

Pagination dans les archives

En plus de définir le nombre de publications extraites de la base de données, vous pouvez également utiliser des paramètres de pagination pour définir la manière dont les publications résultantes seront paginées sur les pages d'archives et de recherche..

Ainsi, par exemple, sur une page d'archive, vous pouvez utiliser ce code pour afficher 20 articles par page dans l'archive:

$ args = array ('posts_per_archive_page' => '20');

Noter la posts_per_archive_page l'argument annulera posts_per_page.

Vous pouvez également choisir de ne produire que les pages qui apparaissent sur une page donnée dans des pages paginées. Ainsi, par exemple, si vous souhaitez afficher les 20 articles qui apparaîtront sur la troisième page de l'exemple ci-dessus, utilisez ceci:

$ args = array ('posts_per_archive_page' => '20', 'paginé' => '3');

Une autre façon d’interroger les mêmes publications serait d’utiliser le décalage argument:

$ args = array ('posts_per_page' => '20', 'offset' => '40');

Cela saute les 40 premiers articles (qui figureraient sur les deux premières pages d'archives) et récupèrera les 20 articles suivants (qui figureraient sur la troisième page d'archives. Une des choses que j'aime beaucoup dans WordPress est la façon dont il vous en donne si souvent plus. un moyen de réaliser quelque chose!

Vous pouvez également désactiver complètement la pagination pour vous assurer que tous les messages apparaîtront sur la même page:

$ args = array ('nopaging' => true);

Résumé

le WP_Query class vous offre une grande flexibilité pour déterminer le nombre de publications que vous souhaitez interroger, leur ordre d'affichage et leur statut..

Certains de ces arguments sont essentiels pour interroger certains types de publication (par exemple 'post_status' => 'hérité' pour les pièces jointes), tandis que d’autres vous donnent simplement plus de contrôle sur la façon dont vos requêtes sont exécutées..

En utilisant ces paramètres, vous pouvez créer des requêtes personnalisées qui font beaucoup plus que simplement afficher les publications les plus récentes..