イベントの告知記事を投稿し、当日になったら非表示にする

久しぶりの更新になりました。

イベントを告知するサイトなどで、未来の日付の記事を表示したいことがあります。
そして、当日になったら非表示にしたい。そんな案件がありましたので、ご紹介したいと思います。

「スケジュール(schedule)」というカスタム投稿タイプを作成し、それを使ってイベントの記事を投稿していくと仮定して、話を進めます。

functions.php

特定のカスタムポストタイプ(例:schedule)の予約投稿(future)があれば公開(publish)するように設定

WordPressはデフォルトでは、未来の日付の記事は予約投稿になってしまいますので、まずfunctions.php に以下のように記述します。

function my_immediately_publish($id)
{
  global $wpdb;
  $q = "UPDATE " . $wpdb->posts . " SET post_status = 'publish' WHERE ID = " . (int)$id;
  $wpdb->get_results($q);
}
add_action('future_schedule', 'my_immediately_publish');

任意のテンプレートへ表示させる

WP_Queryで記述。date_queryも使用

トップページへ表示させる場合は、index.php や front-page.phpに、以下のように記述します。
date_queryを使いました。

<ul class="schedule-list">

  <?php
    $today = date_i18n('Y/m/d');//今日の日付

  $args = [
      'post_type' => 'schedule',
      'order' => 'ASC',
      'posts_per_page' => -1,
      'date_query' => [
           [
             'inclusive' => true,
             'after' => $today  //この日付以降を表示
         ],
      ],
  ];

  $my_query = new WP_Query($args);  ?>

  <?php if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post(); ?>

  <li>
    <p><?php the_time('Y年n月j日 (D)'); ?></p>
    <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
  </li>

  <?php endwhile; wp_reset_postdata(); else : ?>

  <?php endif; ?>

</ul>

date_queryについては、以下のサイトで詳しく説明されています。

参考サイト

WordPressのdate_queryパラメータを使って、複雑な期間指定の投稿を取得する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

keyboard_control_keyTOP