web-dev-qa-db-ja.com

現在の日付に最も近い順に投稿を日付順に並べる

サイドバーに表示されるイベントをクライアントのWebサイトに掲載しています。ホームページを閲覧しているときに1つのイベントが表示され、サイトの他の場所にいる場合はサイドバーに2つのイベントが表示されます。私は現在、イベントが今日であるのか未来であるのかをチェックするmeta_queryの比較を使ってそれらを注文しています。

私がやりたいことは、まず現在の日付に最も近いイベントを表示してから、イベントが見つかるまでチェーンを進めていくことです。現在のところ、代わりに将来の最も遠いイベントを表示しているようです。そのため、2012年1月27日のイベントと2012年8月15日のイベントがあるとしたら、それは8月のイベントを示しているようです。

私が現在持っているコードは以下の通りです。私はそれが私が望む方法で動作するようにするためにそれを微調整する方法についてのいくつかのアドバイスをいただければ幸いです。可能であれば、あなたが投稿したコードに少し説明を加えてください。私はこれが学習経験であることを望みます。

$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

これは単なる暗闇の中のショットですが、イベントを昇順ではなく降順で並べ替えることを試みます。 'order' => 'DESC'

3
Nickiler

私はこれが古いことを知っていますが、DESCによる順序付けは意味がありませんこの場合

DATEs >=CURRENT_DATEを選択します。今すぐ最初に今日に最も近いものを表示したいとします。明日、そして明後日としましょう...

大きい日は何ですか? Tomorrowまたはday after tomorrow?私はあなたについては知りませんが、私はtomorrow < day after tomorrowを賭けます、それゆえ、DESCを注文することはあなたが明日から最初に得ることを意味するでしょう。

私はあなたの本当の問題はあなたのタイピングだと思います(私はあなたもY-m-dフォーマットであなたの日付を保存すると仮定します...

WP_Query: "私はDATEを使っています":

1. DATEと入力して注文が完了するとします。

'meta_type' => 'DATE',

2.比較はDATEと入力して行う必要があるとします。

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

...それから簡単:

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

...うまくいくはずです:)

2
jave.web