WP_Query Arguments Date

Dans cette série sur WP_Query, vous avez appris à utiliser le WP_Query classe pour créer des requêtes personnalisées dans vos fichiers de thème ou vos plugins.

Cette partie de la série explique en détail les arguments que vous pouvez utiliser pour créer des requêtes de date simples et complexes, ainsi que pour publier des publications publiées avant, après ou entre des dates données..

Je vais vous montrer quels paramètres sont disponibles et comment les utiliser pour écrire vos requêtes. Mais d’abord, rappelons 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 de date

Vous pouvez également utiliser des paramètres pour rechercher des publications avec une date de publication à une date donnée. Vous pouvez être aussi précis que vous le souhaitez avec les dates, en utilisant des années et des mois, par exemple, pour récupérer un certain nombre de messages..

Vous pouvez écrire un simple jeu d’arguments ou vous pouvez utiliser date_query pour créer des tableaux imbriqués et exécuter des requêtes plus complexes. Commençons par les arguments les plus simples.

Arguments de date simples

Les paramètres que vous pouvez utiliser pour interroger par date sont les suivants:

  • année (int): Année à quatre chiffres (par exemple. 2015).
  • Monthnum (int): Numéro du mois (à partir de 1 à 12).
  • w (int): Semaine de l’année (du 0 à 53). Le mode dépend du "start_of_week" option que vous pouvez éditer dans votre page de paramètres dans l'admin.
  • journée (int): Jour du mois (à partir de 1 à 31).
  • heure (int): Heure (de 0 à 23).
  • minute (int): Minute (de 0 à 60).
  • seconde (int): Seconde (0 à 60).
  • m (int): AnnéeMois (par exemple. 201502).

Imaginez donc que vous exécutiez un site d’événements qui utilise la date de publication de chaque événement pour indiquer sa date de début. Pour vouloir afficher tous les événements, passés et futurs, se déroulant en 2015, voici les arguments dont vous auriez besoin:

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

Notez que j'ai utilisé futur et publier pour le statut des publications, car les publications planifiées pour une date ultérieure ne sont pas interrogées par défaut.

Ou si vous souhaitez afficher automatiquement les événements survenant cette année et ne pas mettre à jour votre requête chaque année, vous pouvez d'abord obtenir l'année en cours, puis la transmettre dans vos arguments de requête:

$ current_year = the_date ('Y'); $ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'), 'year' => $ current_year);

Arguments de date complexes

Pour utiliser plusieurs paramètres de date afin de créer des requêtes plus complexes, utilisez le date_query paramètre. Cela vous donne accès à plus de paramètres:

  • année (int): Année à quatre chiffres (par exemple. 2015).
  • mois (int): Numéro du mois (à partir de 1 à 12).
  • la semaine (int): Semaine de l’année (du 0 à 53).
  • journée (int): Jour du mois (à partir de 1 à 31).
  • heure (int): Heure (de 0 à 23).
  • minute (int): Minute (de 0 à 59).
  • seconde (int): Seconde (0 à 59).
  • après (chaîne / tableau): Date à laquelle récupérer les messages après. 
  • avant (chaîne / tableau): Date à laquelle récupérer les messages avant. 
  • compris (booléen): Pour après / avant, si la valeur exacte doit correspondre ou non.
  • comparer (chaîne): Un opérateur que vous utilisez pour comparer les données de la base de données avec vos arguments. Les valeurs possibles sont '=', '! =', '>', '> =', '<', '<=', 'COMME', 'PAS COMME', 'DANS', 'PAS DEDANS', 'ENTRE', 'PAS ENTRE', 'EXISTE', et 'N'EXISTE PAS'.
  • colonne (chaîne): Colonne de base de données à interroger: la valeur par défaut est 'postdater'.
  • relation (chaîne): OU ou ET, comment comparer les sous-tableaux. La valeur par défaut est ET.

le date_query paramètre est formaté comme ceci:

$ args = array ('date_query' => array (array (// Les arguments vont ici.)));

Vous pouvez également créer plusieurs tableaux et définir comment ils seront comparés à l'aide du paramètre de relation. L'exemple ci-dessous renverra des requêtes correspondant aux arguments des deux tableaux:

$ args = array ('date_query' => array ('relation' => 'AND', array (// les arguments vont ici.), array (// les arguments vont ici.)));

Bien que le code ci-dessous récupère les publications qui correspondent aux arguments dans un tableau (ou les deux):

$ args = array ('date_query' => array ('relation' => 'OR', array (// les arguments vont ici.), array (// les arguments vont ici.)));

Illustrons ceci avec un exemple. Supposons que vous travaillez sur un site Web d'un collège et que vous souhaitez afficher les messages de cette année académique. L'année académique va du 1er septembre 2014 au 31 août 2015, vous devez donc rechercher des messages au cours des mois et des années concernés:

$ args = array ('date_query' => array ('relation' => 'OR', array ('year' => '2014', 'month' => ('9, 10, 11, 12')), tableau ('année' => '2015', 'mois' => ('1, 2, 3, 4, 5, 6, 7, 8'))));

Notez que le mois paramètre prend une chaîne pour ses arguments, pas un tableau.

Les paramètres avant et après

Une alternative à l'exemple ci-dessus consiste à définir les dates avant et / ou après lesquelles vous souhaitez afficher les publications, à l'aide de la touche avant et après paramètres. Ceux-ci prennent trois arguments:

  • année (chaîne): Accepte toute année à quatre chiffres: vide par défaut.
  • mois (chaîne): Le mois de l'année (1 à 12). La valeur par défaut est 12.
  • journée (chaîne): Le jour du mois (1 à 31). La valeur par défaut est le dernier jour du mois.

Vous pouvez également utiliser une chaîne pour la date, à condition qu'elle soit compatible avec le php peu de temps format.

Revenons donc à mon exemple d’affichage des publications de cette année universitaire et j’ai encore deux options. Tout d'abord, je pourrais utiliser un tableau imbriqué avec les paramètres year et month:

$ args = array ('date_query' => array ('relation' => 'AND', array ('after' => array ('year' => '2014', 'month' => '9'), inclusive '=> true), array (' before '=> array (' year '=>' 2015 ',' month '=>' 8 '),' inclusive '=> true)));

Il y a quelques points à noter ici:

  • J'ai utilisé 'relation' => 'AND' car les articles doivent avoir été publiés après la date de début et avant ma date de fin.
  • Pour chacun des tableaux imbriqués, j'ai utilisé 'inclusive' => true faire en sorte que WordPress récupère les publications publiées en septembre 2014 et en août 2015.

Je pourrais aussi écrire cette requête en utilisant une chaîne pour les dates:

$ args = array ('date_query' => array (array ('after' => '31 août 2014', 'before' => '1er septembre 2015', 'inclus' => false,)));

Notez qu'en raison du fonctionnement des chaînes de date, il est plus fiable d'utiliser des dates exclusives. En effet, si vous utilisez une chaîne de date, celle-ci sera convertie en 00:00 à cette date. Donc, pour que cela fonctionne, utilisez soit l'heure dans votre chaîne, soit faites ce que j'ai fait et utilisez la journée avant la date à partir de laquelle vous souhaitez afficher les publications (et après la date à laquelle vous souhaitez afficher les publications jusqu'à).

Vous pouvez également utiliser les paramètres de date pour afficher les publications publiées aujourd'hui. Pour revenir à mon site d’événements, supposons que je souhaite afficher une grande bannière sur ma page d’accueil le jour où un événement se produit. Je peux écrire une requête pour cela, puis afficher les détails de l'événement, le cas échéant. Voici les arguments:

$ args = array ('post_type' => 'event', 'post_status' => array ('future', 'publish'), 'date_query' => array (array ('year' => date ('Y') , 'mois' => date ('M'), 'jour' => date ('D'))));

En utilisant le rendez-vous amoureux() La fonction retourne la date actuelle. Je l'ai utilisée trois fois pour obtenir le jour, le mois et l'année corrects. Notez que j'ai aussi inclus le post_status argument pour s'assurer qu'un événement se produisant plus tard aujourd'hui est inclus.

Résumé

Parfois, vous ne voulez pas simplement interroger tous les articles publiés. En utilisant le WP_Query classe, vous pouvez créer des requêtes beaucoup plus spécifiques pour afficher les publications par date, y compris les publications que vous avez publiées à une date donnée, avant une date, après une date ou entre deux dates.

le date_query les arguments se combinent avec d'autres paramètres tels que post_status, qui est couvert plus en détail ailleurs dans cette série.