it-swarm.com.de

Bevorstehendes Ereignis: Wie sortiere ich die Datenbank nach dem verwendeten Datumsfeld, ignoriere jedoch vergangene Daten?

Ich benutze ein Ereignis-Plugin und habe Mühe, meine Datenbankabfrage perfekt zu machen. Die Abfrage befindet sich in der Vorlage event-single.php. Was brauche ich die Abfrage zu tun:

  • Fragen Sie den benutzerdefinierten Beitragstyp "Ereignisse" für bevorstehende Ereignisse ab
  • Nach _event_start_date meta_key sortieren, um das früheste Datum anzuzeigen (nächstgelegenes Ereignis)
  • PAST-Ereignisse werden nicht angezeigt
  • Bei "aktuelles Ereignis" wird das nächstgelegene Ereignis angezeigt

Hier sind meine aktuellen $ args.

<?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
   );
?>

$donotrepeat früher definieren

$donotrepeat = get_the_ID();

Bisher war die Abfrage erfolgreich

  • Fragt den benutzerdefinierten Beitragstyp ab
  • Ignoriert das "aktuelle" Ereignis
  • Sortiert nach frühestem Datum.

Ich kann nicht herausfinden, wie ich "vergangene" Daten ignorieren soll. Es gibt einen weiteren Metaschlüssel 'scope', der von diesem Plugin erstellt wurde und Werte wie 'past' und 'future' enthält - das könnte also vielversprechend sein.

Ich habe versucht, mit meta_query das Problem mit dem letzten Datum zu sortieren, aber ich kann es einfach nicht zum Laufen bringen. Ich denke, das ist wahrscheinlich der richtige Weg, aber ich bin offen für andere Ideen. Ich bin sicher, das ist nicht so schwierig ... kann mir jemand helfen?

1
timshutes

Sie sind ziemlich nah dran, aber der Metaschlüssel "scope" würde mich nicht ablenken. Folgendes ist ungetestet.

<?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'
        )
    ),
);
?>

Der meta_key ist nur zum Bestellen vorhanden - meta_query steuert die aktuelle Auswahl.

Beachten Sie, dass ich Ihre posts_per_page so belassen habe, wie sie ist, obwohl dadurch die Auswahl auf einen Datensatz beschränkt wird.

1
vancoder