【WordPress】カスタムフィールドの日付で期間内のスケジュールだけを並べ替えて表示する
岡山民謡太鼓保存会に組み込んであるものです。
カスタムフィールドに入力したイベント日時が未来のものを「スケジュール」に、過去のものを「活動実績」に出し分け、日付順で並べます。
サンプルでは「スケジュール」のカスタム投稿を使い、カスタムフィールドにはこのように入力しています。
ここでは「開催日(yyyy/mm/dd)」のみ使用します。
サンプルコード
PHP
<?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が載っていないので知らないと思いつけないやつ。
活動実績のページでは
PHP
'meta_compare' => '<'
としており、終了した日付のもののみ取得しています。
日付による並べ替え
PHP
'orderby' => 'meta_value'
とすることで、meta_keyで並べ替えることができます。
なお、この場合は問題なく動きましたが、うまくいかない場合は’meta_type’=> ‘DATE’を追加するとよいのかも。
▼参考 トピック: [解決済] カスタムフィールドの日付でソート ≪ サポートフォーラム – WordPress
参考
get_postsで、複数のカスタムフィールドをキーにして検索・取得する方法 | sand a lot Web & Music Create [札幌] カスタムフィールドの値で記事を並べ替える。 – Toro_Unit広告