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