Maintenant que nous avons presque tout appris sur le WP_Query
classe, il est temps d'essayer quelques exemples. Dans cette partie, nous allons travailler sur 10 scénarios différents pour utiliser le WP_Query
classe et fonctions connexes.
Ce sera un exercice amusant et j'espère que ce sera tout aussi instructif. Commençons!
Pour que cet article soit compréhensible séparément de la série "Mastering WP_Query", je devrais faire un nano-tutoriel sur la création de boucles WordPress avec le WP_Query
classe.
Ce n'est pas différent de créer une boucle régulière, vraiment. Une boucle typique de WordPress ressemble à ceci:
Et créer une boucle avec le WP_Query
la classe n'a que quelques différences:
'news', 'posts_per_page' => 3); $ my_query = new WP_Query ($ args); if ($ my_query-> have_posts ()) while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Les données postales vont ici. // Réinitialise les données '$ post' à la publication actuelle dans la requête principale. wp_reset_postdata (); ?>
Voyons la différence entre les deux:
WP_Query
exemple,WP_Query
classe,$ my_query->
au début de la have_posts ()
et la poste()
fonctions (ils sont donc maintenant les méthodes de la WP_Query
classe),$ post
afin qu'il puisse revenir à la requête principale.Maintenant, nous savons comment créer une boucle avec WP_Query
et la différence entre une boucle régulière et une boucle créée avec WP_Query
. Nous n'allons pas créer de boucles dans tous les exemples (pour que le didacticiel soit court et sujet), vous pouvez donc vous référer à cette section si vous avez besoin de créer une boucle avec les exemples ci-dessous..
Supposons que vous souhaitiez répertorier les messages d'un auteur spécifique écrits au cours de l'année en cours dans une section spéciale "Messages de l'auteur de cette année". Une simple combinaison de deux WP_Query
les paramètres suffiront:
'john', // Récupère ses publications de cette année. 'year' => $ current_year); // Instancie une nouvelle instance de requête. $ my_query = new WP_Query ($ args); ?>
Passez cette requête en boucle et vous êtes prêt à partir!
Supposons que vous souhaitiez créer une boucle sous chaque message dans leurs pages et répertorier les derniers messages de la catégorie dans laquelle le message se trouve. Bien sûr, vous devez exclure le message en cours au cas où il s'agirait de l'un des derniers. messages de cette catégorie. Voici comment vous créez la requête avec le 'chat'
et 'post__not_in'
paramètres:
term_id; // arguments de configuration. $ args = array (// Récupère les publications de la catégorie. 'cat' => $ current_post_first_cat_id, // Exclut la publication en cours. 'post__not_in' => array ($ current_post_id)); // Instancie une nouvelle instance de requête. $ my_query = new WP_Query ($ args); ?>
Pour la boucle, je suggère de créer trois ou quatre colonnes avec des miniatures de publication au-dessus des titres de publication. Cela aura l'air vraiment bien juste sous le post et avant la section commentaires.
WordPress n'a pas de système intégré de "post view count", et les plugins qui fournissent cette fonctionnalité sont connus pour ralentir le site Web (car à chaque vue, les plugins écrivent dans la base de données encore et encore pour enregistrer la vue. compte). Cependant, il existe un autre type de mesure permettant de déterminer les publications les plus "populaires": le comptage des commentaires. Et contrairement au nombre de vues, le nombre de commentaires est déjà dans la base de données - le WP_Query
class, il est très facile de commander des articles en fonction du nombre de commentaires:
'compteur de commentaire' ); // Instancie une nouvelle instance de requête. $ my_query = new WP_Query ($ args); ?>
Vous voyez comme c'est facile? Maintenant, imaginez créer un modèle de page personnalisé avec une boucle exécutant cette requête, une page "Articles les plus commentés"..
Lorsque vous utilisez WordPress pour créer des sites Web d'entreprise, des portefeuilles ou des magazines Web, les curseurs sont devenus un standard industriel "indispensable". Je ne suis pas vraiment un fan de sliders (je pense que c'est un mauvais UX) mais le web semble aimer ça, donc je ne peux pas simplement dire non à mes clients tout en créant des sites Web pour eux. S'ils veulent des curseurs, j'utilise une requête simple en utilisant le WP_Query
classe:
'slider', // Obtient une catégorie de slider spécifique. 'category_name' => 'home-slides', // Récupère toutes les diapositives et ne pagine pas. 'nopaging' => true); // Instancie une nouvelle instance de requête. $ my_query = new WP_Query ($ args); ?>
le 'chat'
L'argument peut être utilisé pour récupérer des diapositives de différentes catégories afin que vous puissiez séparer des groupes de diapositives et utiliser plusieurs curseurs sur plusieurs pages. Si vous n'utilisez qu'un seul curseur sur votre site Web, vous pouvez supprimer cette ligne et le tour est joué..
Si vous êtes un passionné de littérature ou de religieux, vous voudrez peut-être placer certaines de vos citations préférées dans l'encadré latéral. Ce n'est pas une perte de temps si vous utilisez la zone avec un but précis. Ainsi, si vous allez répertorier une citation aléatoire dans votre barre latérale de chaque vue, vous pouvez utiliser l'extrait de code suivant pour créer le type de publication et utiliser la requête suivante pour créer une boucle dans votre barre latérale:
'Citations', 'public' => true); register_post_type ('quotes', $ args); add_action ('init', 'quote_post_type'); // arguments de configuration. $ args = array (// Récupère les "citations" de type psot. 'post_type' => 'citations', // Randomise la commande. 'orderby' => 'rand', // Ne récupère qu'un seul élément. 'posts_per_page' = > 1); // Instancie une nouvelle instance de requête. $ my_query = new WP_Query ($ args); ?>
Une solution simple et élégante.
J'ai trouvé cet exemple sur Scribu.net et je dois dire que c'est peut-être le meilleur WP_Query
astuce dans ce tutoriel. C'est un peu plus technique que les autres, car il peut être appliqué à un site Web de commerce électronique utilisant WordPress dans ce contexte..
Voici l'extrait de code que vous utiliserez si vous souhaitez répertorier les éléments d'un type d'article "Produit" personnalisé et filtrer les résultats avec les champs personnalisés "prix":
'product', // Configure la "méta requête". 'meta_query' => array (array (// Récupère le champ personnalisé "price". 'key' => 'price', // Définit les valeurs de prix. 'value' => array (100, 200), // Set l'opérateur de comparaison. 'compare' => 'ENTRE' ', // Ne regarde que les champs numériques.' type '=>' numérique ',))); // Instancie une nouvelle instance de requête. $ my_query = new WP_Query ($ args); ?>
Un grand bravo à Silviu-Cristian Burca!
Voici un exercice amusant et nous allons également utiliser l'API Shortcode! Dans cet exemple, nous allons créer un shortcode qui peut incorporer une publication dans une publication. (Je me suis à peine contenu de nommer le shortcode [postception]
.) Dans l’extrait de code suivant, nous créons une fonction de shortcode qui nous permet d’incorporer des publications (ou tout type de publication personnalisée) et nous permet de choisir d’afficher la publication complète ou juste un extrait:
'post', 'slug' => ", 'full' => true), $ attributs)); // Arguments de configuration. $ args = array (// Obtenir le type de message (" post "par défaut). 'post_type' => $ type, // Obtenir un message par slug. 'name' => $ slug); // Instanciez une nouvelle instance de requête. $ my_query = new WP_Query ($ args); // Vérifiez que nous avons les résultats de la requête. if ($ my_query-> have_posts ()) // commence à générer du balisage. $ output = ''; // Commence à boucler sur les résultats de la requête. while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Ajouter un titre à la sortie. $ output. = ' '; else // Message de sortie pour indiquer à l'utilisateur qu'aucune publication n'a été trouvée. $ output = ''; $ output. = get_the_title (); $ output. = '
'; // Obtenir le message complet si '$ full' est vrai, sinon, affiche l'extrait get if ('true' === $ full) // Ajoute le contenu complet à la sortie. $ output. = ''; $ output. = get_the_content (); $ output. = ''; else // Ajoute un extrait à la sortie. $ output. = ''; $ output. = get_the_excerpt (); $ output. = '… '. __ ('Voir l'article complet', 'tutsplus'). '' '; $ output. = ''; // Termine la génération du balisage. $ output. = ''; $ output. = ' '; wp_reset_postdata (); return $ output; add_shortcode ('embed_post', 'tutsplus_embedded_post_shortcode'); ?>'. __ ('Aucun post trouvé.', 'Tutsplus'). '
'; $ output. = '
Voici une idée: Pourquoi ne pas afficher quelques "aperçus" de vos prochains messages à vos visiteurs? Vous pouvez utiliser la fonction suivante pour répertorier vos publications programmées avec ou sans extraits après les titres:
* * Utilisation sans extraits: * * * / function tutsplus_show_drafts ($ show_excerpts = true) // Arguments de configuration. $ args = array ('post_status' => 'future', 'nopaging' => true); // Instancie une nouvelle instance de requête. $ my_query = new WP_Query ($ args); // Vérifier que nous avons les résultats de la requête. if ($ my_query-> have_posts ()) // Commencez à générer du balisage. $ output = ''; // Commence à boucler sur les résultats de la requête. while ($ my_query-> have_posts ()) $ my_query-> the_post (); // Affiche le titre et l'extrait de l'article brouillon (si activé). $ output. = ' '; else // Informer l'utilisateur que rien n'a été trouvé. $ output = ''; $ output. = ''; // Termine la génération du balisage. $ output. = ''. get_the_title (). '
'; $ output. = get_the_title (); $ output. = ''; if ($ show_excerpts) $ output. = ''; $ output. = get_the_excerpt (); $ output. = ''; $ output. = ''; $ output. = ' '; wp_reset_postdata (); return $ output; ?>'. __ ('Rien trouvé', 'tutsplus'). '
'; $ output. = '
Si votre blog a plus d'un an et que votre contenu est intemporel (c'est-à-dire qu'une personne de 2015 et 2025 jugera l'article pertinent), l'ajout d'une section "Publier une annonce il y a un an" pourrait dynamiser vos pages. Voici comment vous le faites:
date ('j'), // mois (1 - 12). 'monthnum' => date ('n'), // année (moins 1). 'year' => date ('Y') - 1, // Afficher un seul post. 'posts_per_page' => 1); // Instancie une nouvelle instance de requête. $ my_query = new WP_Query ($ args); ?>
Utilisez cette requête pour créer une boucle qui affiche une seule publication d'antan.
Vous n'avez rien d'autre que des titres de sous-pages à insérer dans votre page "Services", "Nos travaux" ou "Mon portefeuille"? Peut-être un paragraphe d'introduction, mais vous avez raison, ces pages sont condamnées à être des "espaces réservés". Néanmoins, c’est une bonne idée de placer des sous-pages, par exemple une grille avec des vignettes carrées et des titres. Voyons quelle requête nous devrions utiliser lors de la création d'un tel modèle de page:
$ current_page_id, // Désactive la pagination. 'nopaging' => true); // Instancie une nouvelle instance de requête. $ my_query = new WP_Query ($ args); ?>
J'espère que vous avez apprécié ces exemples autant que moi tout en les préparant. J'ai porté une attention particulière à donner des exemples variés à la fois pour être amusant et pour stimuler votre créativité..
Si vous avez pensé à de meilleurs exemples en lisant ceux-ci, ou si vous avez des questions, n'hésitez pas à écrire un commentaire ci-dessous. Et si vous avez aimé l'article, n'oubliez pas de le partager avec vos amis!
Dans la prochaine partie, nous parlerons de WP_User_Query
, une des classes sœurs de WP_Query
. À plus tard!