ノラWEB屋 野良人(のらんど)- 個人営業のWEB屋さん

【WordPress】カスタムフィールドの日付で期間内のスケジュールだけを並べ替えて表示する

2016年10月10日

岡山民謡太鼓保存会に組み込んであるものです。

カスタムフィールドに入力したイベント日時が未来のものを「スケジュール」に、過去のものを「活動実績」に出し分け、日付順で並べます。

サンプルでは「スケジュール」のカスタム投稿を使い、カスタムフィールドにはこのように入力しています。

ここでは「開催日(yyyy/mm/dd)」のみ使用します。

サンプルコード

<?php
$args = array(
	'post_type'		=> 'schedule',

	// 開催日以前のものを出力
	'meta_value'	=> date('Y/m/d'),// dateで現在の日時を取得。
	'meta_key'		=> '開催日(yyyy/mm/dd)', // カスタムフィールド「開催日(yyyy/mm/dd)」の値を取得
	'meta_compare'	=> '>=',// meta_valueとmeta_keyを比較して未来の場合のみ表示

	// 日付順でソート
	'orderby'		=> 'meta_value',
	'order'=> 'ASC',
	'showposts'		=> 100 // デフォルトは5件
);
$my_posts = get_posts( $args );
if ( $my_posts ) : // 該当する投稿があったら
foreach ( $my_posts as $post ) :
	setup_postdata( $post );
?>
スケジュール表示の処理
<?php endforeach; ?>
<?php else: ?>
<p>現在決まっている予定はありません。</p>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

スケジュールのページのものです。

ポイント

日付による出し分け

‘meta_compare’を使ってmeta_valueとmeta_keyを比較します。

get_postsを使っていますが、Codexのパラメータのところにmeta_compareが載っていないので知らないと思いつけないやつ。

活動実績のページでは

'meta_compare'	=> '<'

としており、終了した日付のもののみ取得しています。

日付による並べ替え

'orderby' => 'meta_value'

とすることで、meta_keyで並べ替えることができます。

なお、この場合は問題なく動きましたが、うまくいかない場合は’meta_type’=> ‘DATE’を追加するとよいのかも。

▼参考 トピック: [解決済] カスタムフィールドの日付でソート ≪ サポートフォーラム – WordPress

参考

get_postsで、複数のカスタムフィールドをキーにして検索・取得する方法 | sand a lot Web & Music Create [札幌] カスタムフィールドの値で記事を並べ替える。 – Toro_Unit
このエントリーをはてなブックマークに追加