2015年5月14日木曜日

【備忘録】The Event Calendar プラグインにおける日付処理第2段

イベント情報をWordPressで管理するのに、The Event Calendarを利用しています。
(最初に触ったのがこれで、専用関数も多いのでそのまま使っている感じ)

WordPres Advent Calendar 2013にて、カレンダープラグイン「The Event Calendar」での日付降順処理で、このプラグインを使ったイベント最新情報をリスト表示するやり方については説明しています。

「イベントがあまりない月」とか「半年後にイベントが固まっている」なんかの場合の処置についてのサンプルを作ったので備忘録としておいておきます。

なお本プラグインは、カスタム投稿タイプの形式で実装されており、イベント開始日などはカスタムフィールドが使われています。またそれらにアクセスしやすいようにオリジナルの関数も用意されています。

関連情報


サンプル例(1)

現在時刻から3ヶ月後までの最大100件のデータを、イベント開始日の新しい物順に並べる。ただし3ヶ月以内の間近のイベントが5件にみたない場合には、3〜6ヶ月までのイベントより不足分を補う。間近の6ヶ月に1つもデータがない場合には、6ヶ月以降のイベントから不足分を補う。それでもなければ、ない旨を表示する

という事例。

$current_date = date('Y-m-d');   // 現在日時の取得
$end_date = date ('Y-m-d', strtotime('90 days'));  // 現在日時から90日後の日を取得

// 現在から90日後までのデータを100件、降順(DESC)に取得する
$args = array(
  'post_status' => 'publish',
  'post_type' => array(TribeEvents::POSTTYPE),
  'posts_per_page' => 100,
  'start_date' => $current_date,
  'end_date' => $end_date,
  'meta_key' => '_EventStartDate',
  'orderby' => '_EventStartDate',
  'order' => 'DESC',
  'eventDisplay' => 'custom'
);
$get_events = null;
$get_events = new WP_Query($args);

// もし取得データが5件未満なら、
if($get_events->post_count < 5):
  // 現在から180日後までにセットしなおして
  // 現在から180日後までのデータを100件、降順(DESC)に取得する
  $args['end_date'] = date ('Y-m-d', strtotime('180 days'));
  $get_events = null;
  $get_events = new WP_Query($args);

  // もしそれでも5件未満であるなら、
  if($get_events->post_count < 5):
     // 期限を撤廃して、
     // 現在以降のイベントデータを100件、降順(DESC)に取得する
     unset($args['end_date']);
     $get_events = null;
     $get_events = new WP_Query($args);
     // それでもイベントがなし(つまり現在以降のイベント0件)なら、
     if($get_events->post_count == 0):
?>
                <li class="hogehoge">間近のイベントはありません</li>
<?php        
     endif;
  endif;
endif;

// 取得したイベントデータを1つずつ処理する
while( $get_events->have_posts() ):
   $get_events->the_post();  // イベント情報をグローバル変数($post)にセット
?>
  <li>
    <dl>
       <dt><?php echo tribe_get_start_date( $post->ID, false, 'Y/m/d' ); ?></dt>
       <dd><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></dd>
    </dl>
  </li>
<?php 
 endwhile;
 wp_reset_postdata();  // リセット(WP_Queryを使った時のお約束 / 利用したグローバル変数 $post を復帰させる)
?>

---
2015年5月14日 @kimipooh

0 件のコメント:

コメントを投稿