web-dev-qa-db-ja.com

最近のWP_Queryではなく、古い投稿を取得する方法

私はWP_Queryパラメータafter、および私はその日付の後に最も近いポストが欲しい _で_ date_queryをしています、しかし私は日付から将来最も近いものを得ます。これを制御するためのパラメータはありますか? 'near_to' => 'past/future'、またはWP_Queryのようなものは常に最新のものを取得しますか?これは私のコードです:

$my_query = new WP_Query(array(
    'post_type' => 'event',
    'posts_per_page' => 1,
    'date_query' => array(
        'after' => date('Y-m-d h:i',time())
    )
));

私はイベントサイトを持っています、そして私は最も近いものではなく、次のものを見せたいです。

 

確認された日付が今日であり、私が探している投稿が将来であるという事実を無視してください。関係ありません(いいえ、違います)。

私はコーデックスでおしゃべりをしていましたが、何も見つかりませんでした。すべての投稿をクエリして$my_query->posts配列の最後の投稿に移動する必要がありますか。

編集:私は自分の結果を注文したくない、私は最新ではなく、古い投稿でそれらを制限したい(デフォルト)。将来の日付(イベント)の投稿がいくつかありますが、次のイベントが欲しいです。このパラメータ'posts_per_page' => 1だけでクエリを実行すると、最新の投稿が表示されます。最も古い投稿が必要です。

ありがとうございます。


解決策はパラメータ'order' => 'ASC'を使用することです。 @PieterGoosenと@webtoureに感謝します。それでは、私の質問が100%正解ではなかった理由とそれが機能する理由を説明しましょう。

私は'order'でテストしませんでした。私は間違った投稿を1つしか持っていなかったので(私は思っていました)、注文するものはありませんでしたが、WP_Queryはそのようには動作しません私自身が この答え で説明したように、WP_Queryは最初に基準に一致する投稿を見つけ、それからそれらを注文し、ページネーションなどをします。だからあなたは日付'after'を検索することができます。 'ASC'で投稿し、'posts_per_page' => 1で1件だけ投稿します。

2
EliasNS

あなたは実際にあなたのコードで'after' => date('Y-m-d h:i',time())を使っていますか?それは常に投稿を求めます 年上 そのクエリが実行された正確な現在時刻。このようなもの:

'after' => date( 'Y-m-d h:i', time() - 60 * 60 * 24 )

過去24時間の参考になります。

上の部分は歴史のためのものです。この答えの解決策は であり、 - あっという間でした。

結果が "backwords"(逆の場合ではなく最新のもの)であることに関しては、あなたのスニペットにorder節を追加することをお勧めします(私はそれをテストしていません)

$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() ),
        )
    ),
) );

最終編集(テスト済みおよび動作中)。 WordPressはデフォルトで 'DESC'をクエリするので、order節が必要です。コードをテストして自分の目で確かめてください。

3
webtoure