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

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

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

「スケジュール(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 = array( 
  		'post_type' => 'schedule',
  		'order' => 'ASC',
  		'posts_per_page' => -1,
  		'date_query' => array(
  		     array(
  		       '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パラメータを使って、複雑な期間指定の投稿を取得する

コメントを残す

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