Help us understand the problem. What is going on with this article?

【wordpress】イベントの期間中と期間外で記事を出し分ける方法

More than 3 years have passed since last update.

やりたいこと

イベント開催のお知らせ記事を、一覧ページで「期間中」と「期間外」で出し分ける

やり方

wordpressのプラグイン、acf(Advanced Custom Fields)を使います。
(ノーマルなカスタムフィールドでも出来ます。)

◼︎acfの設定

デイトピッカーを使います。
以下のように入力。

image01.jpg

参考:Advanced Custom Fieldsの使い方

◼︎投稿画面の設定

acfを上記のように入力すると、管理画面に以下のような項目が表示されるので、カレンダーからイベントの終了日を選択します。
すると「yyyy/mm/dd」の形式で表示されます。

image02.jpg

◼︎ファイルで出力

以下の条件で表示させます。

・イベント終了日が現在の日付よりも未来ならば「期間中」に表示
(現在の日付も含む)
・イベント終了日が現在の日付よりも過去ならば「期間外」に表示

archive.php
<h2>期間中</h2>
<?php /*postSingle:START*/ ?>
    <?php
        $args = array(
            'meta_value'     => date('Y/m/d'),// dateで現在の日時を取得
            'meta_key'       => '終了日(yyyy/mm/dd)',
            'meta_compare'   => '>=',// meta_valueとmeta_keyを比較して未来の場合のみ表示
            'posts_per_page' => -1,// 期間中のすべての投稿を表示
        );
        $wp_query = new WP_Query( $args );
    ?>
    <section>
        <?php if ( $wp_query->have_posts() ): ?>
            <?php while ( $wp_query->have_posts() ):
            $wp_query->the_post(); ?>
                <?php //ここにループで表示させたいものを書く ?>
            <?php endwhile; ?>
        <?php else : ?>
            <p>期間中の投稿はありません。</p>
        <?php endif; ?>
        <?php wp_reset_query(); ?>
    </section>
<?php /*postSingle:END*/ ?>

<h2>期間外</h2>
<?php /*postSingle:START*/ ?>
    <?php
        $args = array(
            'meta_value'    => date('Y/m/d'),// dateで現在の日時を取得
            'meta_key'      => '終了日(yyyy/mm/dd)',
            'meta_compare'  => '<',// meta_valueとmeta_keyを比較して過去の場合のみ表示
            'posts_per_page' => 5,
        );
        $wp_query = new WP_Query( $args );
    ?>
    <section>
        <?php if ( $wp_query->have_posts() ): ?>
            <?php while ( $wp_query->have_posts() ):
            $wp_query->the_post(); ?>
                <?php //ここにループで表示させたいものを書く ?>
            <?php endwhile; ?>
        <?php else : ?>
            <p>記事が見つかりませんでした。</p>
        <?php endif; ?>
        <?php wp_reset_query(); ?>
    </section>
<?php /*postSingle:END*/ ?>

参考:
【WordPress】カスタムフィールドの日付で期間内のスケジュールだけを並べ替えて表示する
[WordPress] カスタムフィールドの値で条件を絞り込み、ループで記事一覧を表示する

m_t_of
wordpressのカスタマイズ制作をしていることが多いです。 自分用のスニペット集代わりに記事を書いていこうと思います。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away