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..
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:
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..
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..
Commençons par le scénario le plus simple: exécuter une requête pour trouver un article ou une page spécifique..
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.
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');
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');
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'));
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.
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.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');
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');
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
.
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:
Il y a beaucoup plus de possibilités en utilisant les arguments abordés ici, mais cela devrait vous donner un avant-goût.