WordPressで期間限定で記事を表示する方法メモ

大学で所属している団体のサイトを運営しているのですが、そこでイベントの情報を発信していました。その情報はイベントの期間が過ぎたら消したかったのですが、どうすればいいかという問題がなかなか解決出来ず、そんな感じの事をされていたJUSO Coworkingオーナーの@witch_doktorさんに聞いてみました。

管理画面側の設定

これどうやって消す(非表示)んだろうなーってずっと考えていたんですが、表示したものを消すのではなく、そもそも期間外のデータを引っ張ってこないというのが正解でした。(多分)

判別するために投稿にカスタムフィールドで値をもたせます。

カスタムフィールドで値を入力

CustomFieldSuiteを使用しています。

画像のように開催日をハイフンなどを抜きで入力しました。

開催日を判別するので、key は invent にしてあります。

テーマ側での処理

カスタムフィールドで設定した値をmeta_queryに指定し該当するものだけ取得する処理を書きます。

参考:query_posts(WP_Queryクラス)でカスタムフィールドを使う:WordPress私的マニュアル

<?php
// 現在の日付け
$now = date('Ymd');

// 引き出す情報の指定(inventの値が現在の時間より大きい(今日から先)のもの)
$args = array(
        'meta_query' => array(
            array( 
                          'key' => 'invent',
             'value' => $now,
             'compare' => '>=',
             'type' => 'NUMERIC'
            )
        )
);

$the_query = new WP_Query( $args );

if($the_query->have_posts()) :
  while($the_query->have_posts() ) :
    $the_query->the_post();
    // 以下表示したい記事のテンプレートとか
  endwhile;
endif;
?>

これで期日が過ぎたものは表示されなくなります。