web-dev-qa-db-ja.com

WP_Query - 今日の日付から次のカスタム投稿を表示

カスタム投稿タイプを使ってイベントを作成するカレンダープラグインがあります。さまざまな、一見無制限の投稿クエリを作成できるようにするカスタムフィールドがいくつかあります。私が現在焦点を当てているのは、= evcal_start_dateというタイトルの「イベント開始日」を含むフィールドです。

私がする必要があるのは今日から次に来るイベントを表示することです、そしてこれは少し挑戦になりました。

現在のWP_query;

<?php
    $currentdate = date("m/d/Y",mktime(0,0,0,date("m"),date("d"),date("Y")));

    $my_query = new WP_Query(  array ('showposts' => 1,
    'post_type' => 'ajde_events',
    'meta_query'=> array(
    array(
    'key' => 'evcal_start_date',
    'meta_compare' => '>',
    'value' => $currentdate,
    'type' => 'DATE',
    )),
    'meta_key' => 'evcal_start_date',
    'orderby' => 'meta_value',
    'order' => 'ASC'
    )
    );

    while ($my_query->have_posts()) : $my_query->the_post();
    $title = get_the_title();
    $date = get_post_meta($post->ID, 'evcal_start_date', true);

    endwhile; 
?>
<div class="featuredtitle"><?php echo $title; ?><br />
<?php echo $date; ?></div>

$ currentdateのフォーマットがevcal_start_dateのフォーマットと一致するようにしました。 「5/25/2012」として保存されています。

クライアントが常に順番に投稿を作成することを保証できません。そのため、イベントの開始日のカスタムフィールドを使用することが不可欠です。

どうぞよろしくお願いします。素晴らしい記念日を過ごしましょう。

2
frankV

日付フィールドに基づいてソートするには、日付をUNIXの日時形式に変換する必要があります。おそらく別のカスタムフィールドに日付を保存するのが最善です。私はこれを設定する必要はありませんでしたが、あなたは

  1. save_postにフックする
  2. 日付が含まれているカスタムフィールドを探します。
  3. これを別のカスタムフィールドの日時に変換します(おそらく、カスタムフィールドインターフェイスから隠すためにアンダースコアで始まります)。
  4. 非表示のカスタムフィールドを照会して並べ替えに使用します。

日付ピッカーとUNIX形式の日付を格納する機能を備えたカスタムメタボックスプラグインもいくつかあります。

人間が読める形式の日付からUNIXへの変換をするためには、PHPの strtotime()関数 について学びたいと思うでしょう。変換し直すには(UNIXの日付を格納していて、それを人間が読める形式で印刷したい場合)、 date()関数 を使用します。 。

1
mrwweb