web-dev-qa-db-de.com

Ordnen Sie die Beiträge nach Datum in der Reihenfolge an, in der sie dem aktuellen Datum am nächsten liegen

Ich habe eine Liste von Ereignissen auf einer Kundenwebsite, die in einer Seitenleiste angezeigt werden. Wenn Sie sich die Homepage ansehen, sehen Sie ein Ereignis, und wenn Sie sich an einer anderen Stelle auf der Site befinden, sehen Sie zwei Ereignisse in der Seitenleiste. Ich bestelle sie derzeit mithilfe eines Vergleichs mit meta_query, der prüft, ob das Ereignis heute oder in Zukunft stattfindet.

Was ich tun möchte, ist, dass die Ereignisse zuerst in der Nähe des aktuellen Datums angezeigt werden und dann die Kette hochlaufen, bis sie eines finden. Derzeit scheint es stattdessen Ereignisse zu zeigen, die am weitesten in der Zukunft liegen. Wenn ich also ein Ereignis am 27. Januar 2012 und ein Ereignis am 15. August 2012 habe, scheint es das Ereignis im August zu zeigen.

Der Code, den ich derzeit habe, ist der folgende. Ich würde mich über einen Rat freuen, wie ich es optimieren kann, damit es so funktioniert, wie ich es möchte. Bitte geben Sie eine kleine Erklärung für jeden Code, den Sie posten, wenn möglich. Ich möchte, dass dies eine Lernerfahrung ist.

$totalPosts = 2;

    $args = array(
        'post_type'        => 'upcoming_courses',
        'order'            => 'ASC',
        'orderby'          => 'meta_value',
        'suppress_filters' => true,
        'posts_per_page'   => $totalPosts,
        'numberposts'      => $totalPosts,
        'meta_query' => array(
          array(
            'key' => 'course_date',
            'value' => date('Y-m-d'),
            'compare' => '>=',
            'type' => 'NUMERIC'
          )
        )
    );

    $my_query  = new WP_Query( $args );
2

Dies ist nur ein Schuss in die Dunkelheit, aber ich würde versuchen, die Ereignisse in absteigender Reihenfolge anstatt aufsteigend zu ordnen. 'order' => 'DESC'

3
Nickiler

Ich weiß, dass dies alt ist, aberBestellung durch DESC macht keinen Sinn für diesen Fall .

Sie wählen DATEs >=CURRENT_DATE, jetzt möchten Sie zuerst diejenige anzeigen, die der heutigen am nächsten ist, sagen wir morgen und dann übermorgen ...

Was ist ein größeres Datum? Tomorrow oder day after tomorrow? Ich weiß nichts über dich, aber ich wette, dass tomorrow < day after tomorrow, wenn du DESC bestellst, bedeutet das, dass du erst übermorgen etwas bekommst, weil es größer ist.

Ich denke, Ihr eigentliches Problem ist Ihre Eingabe (ich gehe davon aus, dass Sie Ihre Daten auch im Y-m-d-Format speichern ...

Sag WP_Query: "Ich arbeite mit DATEs":

1. Sagen Sie, die Bestellung sollte mit der Eingabe von DATE erfolgen

'meta_type' => 'DATE',

2. Sagen Sie, der Vergleich sollte mit der Eingabe von DATE erfolgen

'meta_query' => [
  [
    'key' => 'course_date',
    'value' => date('Y-m-d'),
    'compare' => '>=',
    'type' => 'DATE' //!important!
  ]
],

... dann einfach:

'orderby' => 'meta_value',
'order' => 'ASC',

... sollte gut funktionieren :)

2
jave.web