ACFで記事の表示期間を設定する

期間限定で応募フォームを作成した時の備忘録。

ACFの設定

表示形式は日本人に馴染みのある形式に変更
Y年F月j日 2024年5月6日

戻り値はY-m-d H:i:sを選択する

カスタム投稿に紐付け&テスト記事を作成

一覧ページには応募期間中のもののみ表示させたい

archive.php
<?php
$today = esc_html(current_time('Y-m-d H:i:s'));
$args = [
    'post_type' => 'product', // 投稿タイプのスラッグ(通常投稿は'post')
    'posts_per_page' => 6, // 表示件数
    'meta_query' => [
        'relation' => 'AND', // 両方の条件を満たす必要がある
        [
            'key'     => 'application_start', // ACFで取得する公開開始日
            'value'   => $today,
            'compare' => '<=', // 公開開始日は今日以前
        ],
        [
            'key'     => 'application_end', // ACFで取得する公開終了日
            'value'   => $today,
            'compare' => '>=', // 公開終了日は今日以降
        ],
    ]
];
$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
    while ($the_query->have_posts()) : $the_query->the_post();
?>

<!-- 投稿アイテムの表示 -->

    <?php endwhile;
else : ?>
    <p>まだ記事がありません</p>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

詳細ページは公開期間中の表示と、開始前、終了後の表示を出し分ける

single.php
<?php
$today = esc_html(current_time('Y-m-d H:i:s'));
$startDate = get_field('application_start'); // 公開開始日を取得
$endDate = get_field('application_end'); // 公開終了日を取得

if ($today < $startDate) : // 現在の日付が公開開始日より前
?>
    <!-- 公開前の表示 -->
    こちらの応募は<?php echo $startDate; ?>から受付開始です。
<?php elseif ($today >= $startDate && $today <= $endDate) : // 現在の日付が公開開始日と公開終了日の間
?>
    <!-- 公開期間中の表示 -->

<?php else : // 現在の日付が公開終了日より後
?>
    <!-- 公開期間終了後の表示 -->
    こちらの応募は締め切りました。
<?php endif; ?>

プラグインを用いた方法もあるけど、
ACFでも意外と簡単に実装できました….!!!