• Home
  • /WordPress
  • /WordPressのカスタム投稿タイプで一番日付の近いものから順に表示

WordPressのカスタム投稿タイプで一番日付の近いものから順に表示

WordPressでイベント記事向けのカスタム投稿タイプを作成していたときに思ったこと。

・イベント表示って過去のものは見せなくてもいいのでは?
・かといって未来のものを投稿の新しい順に表示するのは直近のものが下に表示されてしまう
・もっとも近くに予定しているイベントを一番上に表示させたい!

でもWordPressには未来の記事を表示する機能は付いておらず、当たり前ですが過去の記事も普通に表示されます。

それを実装するコードをちょちょいと作りました。

「$current_date = date_i18n( ‘y/m/d’ );」で現在の日時を取得して格納し、それを後に「meta_query」においてカスタム投稿タイプの投稿群の日付と比較して現在の日時より新しいもののみ出力するようにしています。
更にorderをASCにすることで古いもの順になります。
また下記のコードではカスタム投稿タイプを「live_info」、デイトピッカーのカスタムフィールドを「live_date」として記述しています。
WordPressでは記事の投稿日を未来にすると予約投稿扱いになってしまうのと、UI的に使い慣れてない人は投稿日をいじる場所がわかりづらいということから、カスタムフィールドにデイトピッカーを設けてそれの値の順番に並べ替えるようにしました。
カスタムフィールドを使いたくなくてfunctions.phpに未来投稿を表示できるようにした場合は、orderbyに「date」を入力、meta_keyを削除、meta_query内のkeyに「date」を入力すればいけます。
またこれはwp_queryを使っていますのでご注意。

<?php
	$current_date = date_i18n( 'y/m/d' );
	$args = array(
	'posts_per_page' => '5', //表示件数を入力,-1なら全て表示
	'post_type' => 'live_info', //カスタム投稿タイプのスラッグを入れる
	'post_status' => 'publish',
	'orderby' => 'meta_value', //meta_keyで指定するカスタムフィールドの順に並び替え
	'order' => 'ASC', //昇順に並び替え,「DESC」で降順になる
	'meta_key' => 'live_date', //並び替えに使用したいカスタムフィールドのフィールド名を入れる
	'meta_query' => array(
						array(
							'key' => 'live_date', //meta_keyと同値を入力
							'value' => $current_date,
							'compare' => '>=',
							'type' => 'DATE'
						)
					)
	);
	$the_query = new WP_Query($args);
	if ( $the_query->have_posts() ) :
	while ( $the_query->have_posts() ) : $the_query->the_post();
?>

//記事のループ内容を記載

<?php endwhile; endif; ?>