WP_Query Arguments Posts, Pages et Post types

Dans cette partie de cette série sur WP_Query, vous apprendrez à utiliser WP_Query pour rechercher des publications, des pages et des types de publication personnalisés. Vous pouvez rechercher des publications et des pages spécifiques ou vous pouvez exécuter une requête pour renvoyer des publications d'un ou plusieurs types de publication..

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..

Interrogation pour des articles uniques ou des pages

Commençons par le scénario le plus simple: exécuter une requête pour trouver un article ou une page spécifique..

Requête pour un poste

Pour rechercher un message spécifique (ou un ensemble de messages), vous avez deux options:

  • p (int): Utiliser post ID.
  • prénom (chaîne): Utilisez post slug.

Vous pouvez utiliser ces paramètres avec tout type de publication, y compris les publications, les pages, les pièces jointes et les types de publication personnalisés. Par défaut, WordPress interrogera le 'poster' postez le type et ne renvoyez pas les pages ou les types d'articles personnalisés. Si vous voulez le faire, vous devrez ajouter plus d'arguments ou utiliser un argument différent, ce que j'aborderai plus loin dans ce tutoriel.

Ainsi, pour renvoyer un message spécifique, vous utiliseriez l'un de ceux-ci:

$ args = array ('p' => '32');

ou:

$ args = array ('name' => 'post_slug');

Notez que le prénom paramètre prend le post slug comme argument, ne pas son titre.

En utilisant le prénom Ce paramètre facilite l'identification de ce que votre requête extraira de la base de données lorsque vous revisitez votre code ultérieurement, mais il existe un risque que cela ne fonctionne pas si l'un des utilisateurs de votre site modifie la publication. L'identifiant de l'article ne peut pas être modifié, ce qui est plus sûr.

Interrogation pour une page

Pour interroger une page spécifique, vous avez à nouveau deux options:

  • page_id (int): Utiliser l'ID de la page.
  • Nom de la page (chaîne): Utiliser un slug de page.

Ainsi, pour exécuter une requête qui extrait une seule page spécifique de la base de données, vous utiliserez l'une de ces méthodes:

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

ou:

$ args = array ('pagename' => 'page_slug');

Interrogation d'un poste d'un autre type

Pour exécuter une requête pour une publication d'un autre type de publication, y compris un type de publication personnalisé, vous devez également utiliser la commande Type de poste paramètre. Je traiterai de cela un peu plus en détail plus tard dans ce tutoriel, mais en bref, pour interroger un seul message dans le produit type de message personnalisé, vous utiliseriez ceci:

$ args = array ('p' => '46', 'post_type' => 'product');

Ou pour rechercher une pièce jointe, vous utiliseriez:

$ args = array ('p' => '46', 'post_type' => 'pièce jointe');

Interrogation des pages enfants

Parfois, vous devrez peut-être extraire toutes les pages enfants d'une page donnée, par exemple si votre site a une structure de page hiérarchique et que vous souhaitez afficher une liste sur chaque page des enfants de cette page..

Remarque: vous ne feriez pas cela avec les publications car elles ne sont pas hiérarchiques, bien que vous puissiez utiliser un type de publication personnalisé s'il est hiérarchique..

Vous avez trois arguments que vous pouvez utiliser pour cela:

  • post_parent (int): Utilisez l'ID de page pour renvoyer uniquement les pages enfants. Défini à 0 pour renvoyer uniquement les entrées de niveau supérieur.
  • post_parent__in (tableau): Utiliser un tableau d'ID de publication.
  • post_parent__not_in (tableau): Utiliser un tableau d'ID de publication.

Jetons un coup d'oeil à chacun d'eux.

La première, post_parent, vous permet de rechercher des pages qui sont les enfants d'une page spécifique. 

Donc, pour trouver toutes les pages qui sont des enfants d'une page donnée, vous utiliseriez ceci:

$ args = array ('post_type' => 'page', 'post_parent' => '2');

Notez que vous devez inclure le Type de poste argument comme type de message par défaut WP_Query cherche est poster.

Pour aller plus loin, voici comment vous l'utiliseriez pour trouver les enfants de la page en cours:

$ current_page_id = get_the_ID (); $ args = array ('post_type' => 'page', 'post_parent' => $ current_page_id);

Vous pouvez également utiliser ce paramètre pour identifier les pages de niveau supérieur, c'est-à-dire celles sans parent:

$ args = array ('post_type' => 'page', 'post_parent' => '0');

Mais que faire si vous voulez identifier les enfants de plusieurs pages? Vous pouvez le faire aussi, avec le post_parent__in paramètre. Cela prend un tableau d'identifiants post.

Donc, pour interroger les enfants de deux de vos pages, vous utiliseriez ceci:

$ args = array ('post_type' => 'page', 'post_parent__in' => array ('2', '4'));

Vous pouvez également exclure des pages enfants de votre requête à l’aide de la touche post_parent__not_in paramètre:

$ args = array ('post_type' => 'page', 'post_parent__not_in' => array ('2', '4'));

Interroger plusieurs messages

Il est également courant d'exécuter une requête pour inclure ou exclure plusieurs publications. Vous avez deux arguments que vous pouvez utiliser pour cela:

  • post__in (tableau): Utiliser les identifiants postaux.
  • post__not_in (tableau): Utiliser les identifiants postaux.

le post__in L'argument peut être utilisé pour tous les types de publication et prend un tableau d'identifiants. Donc, pour afficher une liste de publications spécifiques, vous utiliseriez ceci:

$ args = array ('post__in' => array ('36', '52', '246', '354'));

Remarque: si vous utilisez cet argument pour récupérer des publications, WordPress continuera à récupérer les publications persistantes, même si elles ne figurent pas dans votre liste. Pour les omettre, vous utilisez le ignore_sticky_posts argument:

$ args = array ('post__in' => array ('36', '52', '246', '354'), 'ignore_sticky_posts' => 'true');

le post__not_in argument fonctionne de la même manière, en prenant à nouveau un tableau d’ID de publication, mais il produira tout le reste, à l’exception des publications répertoriées. Vous devez normalement le combiner avec d'autres arguments pour éviter de générer une liste énorme de publications..

Donc, pour interroger tous les messages de la produit postez le type mais en excluez quelques-uns:

$ args = array ('post_type' => 'product', 'post__not_in' => array ('36', '52', '246', '354'));

Donc, pour combiner cela avec l'un de nos exemples précédents, voici comment vous interrogez toutes les pages de niveau supérieur, à l'exception de la page actuelle:

$ current_page_ids = array (get_the_ID ()); $ args = array ('post_parent' => '0', 'post__not_in' => $ current_page_ids);

Notez que si vous avez également enregistré un type de publication hiérarchique, vous devez inclure le Type de poste paramètre dans ce code pour simplement interroger des pages.

Interrogation des types d'articles

Dans certains des exemples ci-dessus, j'ai utilisé le Type de poste paramètre permettant d'identifier les publications d'un certain type. Examinons les arguments que vous pouvez utiliser avec ce paramètre:

  • poster: Une publication.
  • page: Une feuille.
  • révision: Une révision.
  • attachement: Une pièce-jointe.
  • nav_menu_item: Un élément de menu de navigation.
  • tout: Récupère tout type sauf les révisions et les types avec 'exclude_from_search' mis à vrai quand ils ont été enregistrés.
  • Types de messages personnalisés (par exemple. produit).

Comme nous l'avons vu ci-dessus, vous pouvez utiliser ce paramètre avec d'autres arguments pour rendre votre requête plus précise..

Donc, pour donner un exemple simple, voici comment vous interrogez toutes les pages de votre site:

$ args = array ('post_type' => 'page');

Types de messages personnalisés

Interroger un type de message personnalisé est simple: utilisez le nom que vous avez donné au type de message lors de son enregistrement., ne pas le titre utilisé dans les menus de l'administrateur. Alors, disons que vous avez enregistré vos types de publication de produit en utilisant register_post_type () comme suit:

function register_product () $ args = array ('name' => __ ('Products', 'tutsplus'), 'singular_name' => __ ('Produit', 'tutsplus')); register_post_type ('product', $ args); 

La valeur que vous utilisez pour le Type de poste argument lors de la recherche de produits n'est pas 'Produit' ou 'Des produits' mais 'produit':

$ args = array ('post_type' => 'product');

Les pièces jointes

Par défaut, si vous essayez d'exécuter une requête pour les pièces jointes, cela ne fonctionnera pas, car WordPress définit post_status des pièces jointes à hériter et WP_Query par défaut à 'post_status' => 'publier' sauf indication contraire de votre part. Donc, si vous voulez interroger des pièces jointes, doit inclure le post_status argument:

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

Notez que vous pouvez également utiliser tout au lieu de hériter.

Résumé

En utilisant WP_Query créer des requêtes personnalisées pour les publications et les types de publication est quelque chose que je fais beaucoup. Comme vous l'avez vu dans les exemples ci-dessous, les possibilités sont nombreuses:

  • Utilisez-le pour rechercher des pages de premier niveau sur votre site..
  • Utilisez-le pour rechercher des publications d'un type de publication spécifique.
  • Utilisez-le pour rechercher toutes les publications, à l'exception de celles que vous spécifiez..
  • Utilisez-le pour interroger tous les enfants de la page en cours.

Il y a beaucoup plus de possibilités en utilisant les arguments abordés ici, mais cela devrait vous donner un avant-goût.