カスタムフィールドに入れた日付順に記事一覧を並べ替える方法

カスタムフィールドに入れた日付順に記事一覧を並べ替える方法

カスタムフィールドに入れた日付順に記事一覧を並べ替える方法
  • シェアしてね♪
  • このエントリーをはてなブックマークに追加


  • Youtube動画変換・ダウンロードおk!
  • このエントリーをはてなブックマークに追加

カスタムフィールドに入れた日付をベースに、記事一覧を並べ替える(ソートする)方法を紹介いたします。

通常記事一覧を出力する場合は、投稿日を基準に並べられます。しかし、投稿日は関係なく、カスタムフィールドに入れた日付で一覧を並び替えたい場合もあると思います。

当記事では、イベントが実施される日付をカスタムフィールドに入れたと仮定して、イベント日の順番で記事一覧を並べ替える方法を解説したいと思います。

スポンサードリンク

カスタムフィールドに入れた日付順に記事一覧を並べ替える方法

カスタムフィールドの値を使って一覧の並べ替えをするには、記事を抽出する際に「meta_key」と「orderby」を指定してあげます。

'meta_key' => 'eventday',
'orderby' => 'meta_value',
'order'=> 'ASC',

eventdayの部分にカスタムフィールドのキーを入力します。orderbyで「meta_value」を指定することで、eventdayを基準に並べ替えます。「’order’=> ‘ASC’」なら昇順、「’order’=> ‘DESC’」にすれば降順になります。

さらに、本日以降のイベントのみを表示させたい場合は、以下のような指定も追加します。

'meta_compare' => '>=',
'meta_value'=> date("Y年m月d日"),
'type' => 'DATE',

meta_compareには演算子、meta_valueには比較対象の日付、つまり今日の日付が入るように指定します。

「’type’ => ‘DATE’」はこれは日付ですよー、という指定です。記事一覧を出力する際に、get_postsを使っていればこのままで大丈夫ですが、場合によっては「’meta_type’ => ‘DATE’」としないと動かない場合もあるみたいです。

meta_valueの値はカスタムフィールドの値と形式を合わせて指定します。例えば、2015/04/23という形式でカスタムフィールドに入力していたら、「date(“Y/m/d”)」とします。

上記を踏まえて、記述したループ全体が以下になります。イベント日によって一覧を並べ替え、本日以降の記事だけを出力します。

<div class="event-content">
<ul>
<?php
$args = array(
'post_type' => 'event',
'posts_per_page' => -1,
'meta_key' => 'eventday',
'orderby' => 'meta_value',
'order'=> 'ASC',
'meta_compare' => '>=',
'meta_value'=> date("Y年m月d日"),
'type' => 'DATE',
);
$domestic_post = get_posts($args);
if($domestic_post) : foreach($domestic_post as $post) : setup_postdata( $post ); ?>
<li class="event-list">
<span class="event-date"><?php echo esc_html(get_post_meta($post->ID , 'eventday' ,true)); ?></span>
<span class="event-title"><a href="<?php the_permalink(); ?>"><?php if(mb_strlen($post->post_title)>34) { $title= mb_substr($post->post_title,0,34) ; echo $title. … ;} else {echo $post->post_title;}?></a></span>
</li>
<?php endforeach; ?>
<?php else : ?><p>表示するイベントがありません。</p>
<?php endif;
wp_reset_postdata(); ?>
</ul>
</div>

上記のように記述することで、カスタムフィールドの値で一覧を並べ替えることができます。

あとがき

これは並べ替え関係ないですが、日付の箇所で「カスタムフィールドの値が入っていたらその値を、空だったら投稿日を出力」するには、以下のように条件分岐させます。

<?php $custom_fields = get_post_meta( $post->ID , 'eventday' , true );
if(empty( $custom_fields ) === false){
echo esc_html(get_post_meta($post->ID , 'eventday' ,true));
} else {
the_time('Y年m月d日');
} ?>

カスタムフィールドの値で並べ替える場合は必要ないですが、一応備忘録として残しておきます。

この記事が気に入ったら
いいね!してね♪

Twitter で
スポンサードリンク

関連記事

コメントを残す

メールアドレスが公開されることはありません。