【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
    • このエントリーをはてなブックマークに追加
    広告
    野良人 代表
    新免祥太
    1988年岡山生まれ。外食企業のWEB・EC担当を経験したのち、2013年12月より「野良人(のらんど)」の屋号で独立しWEBデザイン・プログラミングなどWEBサイト制作の工程全般を請け負っています。お気軽にご相談ください。
    <次の記事(2016/10/31)
    「Misoca(ミソカ)」で通販サイトの請求書を一括作成・一括発行
    前の記事>(2016/07/11)
    Word Camp Kansai 2016に行ってきた
    記事一覧