web-dev-qa-db-fra.com

Evénement à venir: Comment trier la base de données par champ de date personnalisé, tout en ignorant les dates antérieures?

J'utilise un plugin d'événements et je lutte pour que ma requête de base de données soit parfaite. La requête concerne le modèle event-single.php. Ce que j'ai besoin de la requête à faire:

  • Interrogez le type de message personnalisé "événements" pour les événements à venir
  • Trier par _event_start_date meta_key pour afficher la date la plus proche (événement le plus proche)
  • Ne pas afficher les événements PASSÉS
  • Si "événement en cours", affiche l'événement suivant le plus proche

Voici mes $ args actuels.

<?php $args = array(
    'post__not_in' => array($donotrepeat),
    "post_type" => 'event',
    'meta_key' => '_event_start_date', // name of custom field
    'orderby' => 'meta_value_num',
    "order" => 'ASC',
    "posts_per_page" => 1
   );
?>

Définir $donotrepeat plus tôt

$donotrepeat = get_the_ID();

Jusqu'ici, la requête a réussi

  • Requête type de poste personnalisé
  • Ignore l'événement "en cours"
  • Tri par date la plus ancienne.

Je n'arrive pas à comprendre comment ignorer les dates "antérieures". Il existe une autre méta-clé "scope" créée par ce plugin qui contient des valeurs telles que "past" et "future" - cela pourrait donc être prometteur.

J'ai essayé d'utiliser meta_query pour résoudre le problème des dates passées, mais je n'arrive pas à le faire fonctionner. Je pense que c'est probablement la voie à suivre, mais je suis ouvert à d'autres idées. Je suis sûr que ce n'est pas si difficile ... quelqu'un peut-il aider?

1
timshutes

Vous êtes assez proches, mais je ne me laisserais pas distraire par la méta-clé "scope". Ce qui suit n'est pas testé.

<?php
$args = array(
    'post__not_in' => array($donotrepeat),
    "post_type" => 'event',
    'meta_key' => '_event_start_date', // name of custom field
    'orderby' => 'meta_value',
    "order" => 'ASC',
    "posts_per_page" => 1,
    'meta_query' => array(
        array(
            'key' => '_event_start_date',
            'value' => date('Y-m-d'),
            'compare' => '>=',
            'type' => 'DATE'
        )
    ),
);
?>

La clé meta_key n'est présente que pour la commande - meta_query contrôle la sélection réelle.

Notez que j'ai laissé votre posts_per_page en l'état, même si cela limite la sélection à un enregistrement.

1
vancoder