Je fais un WP_Query
avec un date_query
paramètre after
et Je veux le message le plus proche après cette date , mais je reçois les plus lointains à partir de la date. Y at-il un paramètre pour contrôler cela? Quelque chose comme 'near_to' => 'past/future'
ou WP_Query récupère toujours le plus récent? Ceci est mon code:
$my_query = new WP_Query(array(
'post_type' => 'event',
'posts_per_page' => 1,
'date_query' => array(
'after' => date('Y-m-d h:i',time())
)
));
J'ai un site d'événements et je veux montrer le prochain, pas le plus éloigné.
Ignorez le fait que la date cochée est aujourd'hui et que le post que je recherche appartient au futur. Cela n'a pas d'importance (non?).
Je suis allé au Codex mais je n’ai rien trouvé. Dois-je interroger TOUT après et aller au dernier élément du tableau $my_query->posts
?
Edit: Je ne veux pas commander mes résultats, je veux les limiter par les anciens messages, pas par les plus récents (par défaut). J'ai plusieurs messages avec une date future (événements), et je veux le prochain événement. Si je fais une requête avec seulement ce paramètre 'posts_per_page' => 1
, je reçois le dernier message et je veux le plus ancien.
Merci!
La solution consiste à utiliser le paramètre 'order' => 'ASC'
. Merci à @PieterGoosen et @webtoure. Permettez-moi maintenant d’expliquer pourquoi ma question n’est pas exacte à 100% et pourquoi cela fonctionne.
Je n'ai pas testé avec 'order'
car je n'ai qu'un seul post (c'est ce que je pensais), je n'avais rien à commander, maisWP_Query
ne fonctionne pas de cette façon . Comme je l'ai moi-même expliqué sur cette réponse , WP_Query
trouve d'abord les articles qui correspondent aux critères, puis les commande, fait la pagination, etc. Vous pouvez donc rechercher des articles 'after'
une date (tous), puis les commander. par 'ASC'
, et recevez seulement 1 message avec 'posts_per_page' => 1
.
Utilisez-vous réellement 'after' => date('Y-m-d h:i',time())
dans votre code? Cela demandera toujours des messages plus âgée plus récent que l'heure exacte exacte lorsque cette requête est exécutée. Quelque chose comme ça:
'after' => date( 'Y-m-d h:i', time() - 60 * 60 * 24 )
vous donnerait une référence pour 24 heures dans le passé.
La partie ci-dessus est pour l'histoire. La solution dans cette réponse est et était juste tout au long cependant.
En ce qui concerne les résultats "backwords" (du plus récent au plus ancien au lieu de l'inverse), vous pouvez ajouter une clause order
à votre extrait (je ne l'ai pas testé):
$my_query = new WP_Query( array(
'post_type' => 'post',
'order' => 'ASC',
'posts_per_page' => 1,
'date_query' => array(
array(
'after' => date( 'Y-m-d h:i', time() ),
)
),
) );
Edition finale (testé et fonctionnel). Vous avez besoin de la clause order
puisque WordPress interroge le message 'DESC' par défaut. Testez le code et voyez par vous-même.