Présentation de WP_Query • WPShout

By | janvier 7, 2020

Cours WordPress en ligne

le WP_Query La classe est un outil exceptionnellement puissant dans WordPress. Comme vous le savez peut-être, chaque site WordPress contient une base de données qui stocke de nombreux messages (de nombreux types de messages) qui constituent la majeure partie du contenu de ce site, et WP_Query est le meilleur moyen de aller chercher ou récupérer une sélection donnée de ces postes à traiter. Ainsi, vos fichiers de thème l'utilisent régulièrement, et de nombreux plugins sur votre site WordPress le feront.

L'utilisation et le pouvoir de WP_Query aura plus de sens lorsque nous entrerons dans les détails, alors commençons!

WP_Query et PHP orienté objet

WP_Query est une classe PHP qui possède certaines propriétés. Lorsque vous dites, en PHP, new WP_Query () vous créez un objet (ou une instance) de cette classe.

Si le PHP orienté objet est un nouveau concept, vous voudrez peut-être lire notre introduction au sujet. Si vous l'avez lu ou si vous comprenez déjà les bases du PHP orienté objet, appliquons ces concepts à WP_Query.

Obtenir le WP_Query Objet que vous voulez

Lorsque vous créez un nouveau WP_Query objet, vous créez un requete qui extraira de la base de données WordPress tous les articles que vous demandez.

Lorsque vous créez un nouveau WP_Query objet, vous créez une base de données requete qui extraira de la base de données WordPress tous les articles WordPress que vous demandez.

Donc, l'une des premières choses que vous devez comprendre WP_Query est-ce que par défaut, quand vous dites nouveau WP_Query, vous n'en tirez pas grand-chose. Au contraire, la façon dont vous créez votre objet – la requête spécifique que vous exécutez – est la façon dont vous exploitez la puissance de WP_Query.

La Bible de Gutenberg

Le Codex WordPress. (Mais en fait une Bible de Gutenberg.)

Le «constructeur» ou méthode d'initialisation de WP_Query prend un seul paramètre, $ args. Ceci est courant dans WordPress – vous passez juste un tableau ou une chaîne de $ args qui contient une riche spécification de ce que vous voulez récupérer. La profondeur de ce qui peut être mis dans votre $ args sont bien au-delà de ce qui serait précieux à partager ici, mais nous couvrirons les points de base. Lorsque vous avez besoin de faire une requête spécifique dans un but précis, je vous recommande de consulter le Codex.

le $ args Le paramètre accepte à la fois les tableaux et les chaînes, et la syntaxe est légèrement différente entre eux. Je vous recommande surtout de construire votre $ args comme des tableaux, car ils peuvent vous emmener bien plus loin et avec moins de poids mental que les cordes.

Un exemple WP_Query: Obtenez tous les messages de lien que j'ai écrits récemment

Le Codex recommande que vous puissiez obtenir toutes les publications d'un utilisateur spécifique avec cette syntaxe:

$ query = new WP_Query ('author_name = rami');

Comme je l'ai mentionné, cependant, j'utiliserai des tableaux, car il est beaucoup plus facile de tout suivre avec un tableau bien formaté qu'une chaîne alambiquée.

Donc, pour écrire une requête pour trouver des articles que j'ai écrits, je commencerai par ce qui suit:

$ query = new WP_Query (array ('author_name' => 'david'));

Si vous souhaitez en savoir un peu plus sur la syntaxe des tableaux, consultez mon tutoriel d'introduction sur les tableaux PHP.

Notre objectif ici est de récupérer un ensemble de tous les messages sur les liens que j'ai écrits ici sur WPShout la semaine dernière. Pour ce faire, je crée la requête suivante:

    «david»,
    'post_type' => 'post',
    'tax_query' => tableau (
        tableau (
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => tableau (
                «lien post-formatage»
            ),
        )
    ),
    'date_query' => tableau (
        tableau (
            'après' => date ('F j, Y', (strtotime ('il y a 7 jours'))),
            'inclusive' => true,
        ),
    ),
    'posts_per_page' => -1,
);
$ query = new WP_Query ($ query_args);

Ce que cela fait est assez profond, mais je plonge avec les deux pieds pour vous montrer la profondeur que vos requêtes peuvent avoir lorsque vous comprenez WP_Query. La première ligne de notre $ query_args tableau dont nous avons discuté dans le premier exemple – il limite nos résultats à mes messages.

Il est également important de réaliser que l’élaboration des requêtes dans WP_Query est un et relation. Donc, chaque nouveau critère que j'ajoute limite le nombre de messages que je reçois en fonction des critères spécifiés. Et ma première nouvelle limite est que je spécifie que je ne veux que des publications, pas tout autre type de publication (aka: contenu). C'est techniquement redondant, mais mieux sûr et explicite que simple et confus je dis.

Wordpress-post-formats

Le bit suivant – le tax_query nous contraint au format de publication de lien. Les formats de publication sont l'une des parties les plus délicates de WordPress, et cette requête semble le montrer. En bref, les formats de publication ne sont techniquement qu'une taxonomie WordPress, comme des balises ou des catégories, et donc pour vous limiter à un format spécifique, vous devez l'utiliser dans votre argument. Il s'agit du format spécifique que le Codex recommande pour obtenir des formats de publication.

Ensuite, je ne veux que des messages des 7 derniers jours. Les nouvelles fonctionnalités de Date Query ajoutées dans WordPress 3.7 sont excellentes, mais je ne fais qu'effleurer leur surface ici.

Enfin, avec 'posts_per_page' => -1 nous disons à WordPress de ne pas paginer – ne nous donnez qu'un sous-ensemble de tout ce qu'il trouve – parce que même s'il y avait 250 publications, je les veux toutes. Parfois, la valeur par défaut de la pagination sur un site spécifique est assez faible, et vous voudrez pas mal de résultats, et vous pouvez être assez confus si vous oubliez que WP_Query pagine par défaut.

Utilisation des résultats de notre exemple de requête WP

Il y a un secret sympa caché à l'intérieur de WordPress, et il est lié à cela WP_Query objet que nous abordons à travers la section ci-dessus. Qu'Est-ce que c'est? C’est que nous sommes déjà habitués à travailler avec WP_Query objet si nous sommes à l'aise avec "The Loop", que j'ai décrit en détail, et dans une fonctionnalité sur les "trois concepts fondamentaux des thèmes WordPress".

Donc, chaque fois que vous êtes à l'intérieur while (have_posts ()), vous travaillez toujours avec un WP_Query objet, il vient de vous être caché. La façon dont vous travaillez avec votre nouveau n'est donc pas du tout étrangère. Pour parcourir les résultats comme vous en avez l'habitude dans les fichiers de modèle pour votre thème, le processus est très similaire à celui de la boucle par défaut:

$ query = new WP_Query ($ query_args);

while ($ query-> have_posts ()) 
$ query-> the_post ();
écho '
  • '. get_the_title (). "
  • » // Restaurer les données de publication d'origine wp_reset_postdata ();

    Cela signifie que lorsque vous avez fait tout tandis que have_posts () danser, vous travaillez avec un WP_Query objet tout au long, il vient juste de vous être caché. La façon dont vous travaillez avec votre nouveau n'est donc pas du tout étrangère.

    Cette tandis que boucle, et l'amorçage de la poste() sont comme dans la boucle par défaut, sauf que nous expliquons WP_Query objet auquel nous l'appliquons – notre propre requête personnalisée, que nous avons nommée $ query.

    À l'intérieur de notre boucle de notre objet, nous marquons ces titres de publication dans une simple liste HTML. Vous pouvez faire une tonne de mise en forme supplémentaire et utiliser toutes les balises de modèle que vous avez l'habitude d'utiliser dans la boucle.

    Vraiment, le seul détail nouveau et important ici si vous connaissez The Loop est l'appel à la wp_reset_postdata () fuction sur la dernière ligne. Cela est nécessaire dans les boucles alternatives car WordPress repose sur de nombreuses variables globales, et si vous ne le faites pas, des choses étranges peuvent se produire avec des choses comme votre is_category () appelle ailleurs dans la page. C'est donc une bonne pratique, comme le décrit Brian Krogsgard, de toujours aller de l'avant et de mettre fin à toute utilisation personnalisée de WP_Query objet avec un appel à wp_reset_postdata.

    Nous venons tout juste de commencer… de connaître WP_Query

    J'espère que vous vous sentez maintenant comprendre ce que WP_Query la classe et les objets sont, comment vous pouvez les utiliser pour obtenir à peu près n'importe quel contenu que vous voulez hors de WordPress. Il y a tellement plus de critères de sélection disponibles que nous n'en avons parlé jusqu'à présent. Il y a de bonnes chances que si vous pensez "j'aimerais avoir des messages où …" un voyage au Codex pour découvrir la manière spécifique qui fonctionne à l'intérieur WP_Query vous fera avancer. Vous pouvez filtrer par n'importe quelle taxonomie, n'importe quel champ personnalisé, n'importe quel statut de publication et même si la publication est protégée par mot de passe.

    Une dernière note: nous ne l'avons pas encore abordé, mais vous connaissez peut-être la fonction query_posts (). Cela peut sembler être un raccourci précieux, mais ce n'est pas une bonne idée à utiliser. Voici une excellente explication d'Andrey Savchenko (alias Rarst) pourquoi.

    Nous avons à peine effleuré la surface de toutes les subtilités et possibilités de WP_Query dans votre travail avec WordPress. Si vous êtes prêt pour un peu plus de profondeur, je recommande fortement cette conférence d'Andrew Nacin: "You Don't Know Query." (J'ai découvert cela à partir du grand post mentionné ci-dessus de Brian Krogsgard.) Que ressentez-vous comme vous ne sais toujours pas WP_Query? J'espère moins qu'avant!

    Crédit d'image: Andrew Beeston, starfire2k