イベントの告知記事を投稿し、当日になったら非表示にする
久しぶりの更新になりました。
イベントを告知するサイトなどで、未来の日付の記事を表示したいことがあります。
そして、当日になったら非表示にしたい。そんな案件がありましたので、ご紹介したいと思います。
「スケジュール(schedule)」というカスタム投稿タイプを作成し、それを使ってイベントの記事を投稿していくと仮定して、話を進めます。
Contents
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
については、以下のサイトで詳しく説明されています。