gooodmark

goodなWebサイトを厳選ブックマーク!デザインやディレクションの参考にどうぞ。

724bookmark

カスタムフィールドの日付でイベント情報を作る

※イベント情報はカスタム投稿eventsで投稿

カスタムフィールドテンプレート

カスタムフィールドテンプレートで入力した開催日event_date_startと終了日event_date_endを入力。
※1日開催の時は両方に同じ日を入力

[event_date_start]
label = 開催日
type = textfield
size = 35
date=true
dateFormat = yyyy-mm-dd
startDate = '2016-01-01'
dateFirstDayOfWeek = 0
class = required

[event_date_end]
label = 終了日
type = textfield
size = 35
date=true
dateFormat = yyyy-mm-dd
startDate = '2016-01-01'
dateFirstDayOfWeek = 0
class = required

event_state.php

開催中(当日又は期間)には「開催中」、終了したイベントには「終了」を表示。

<?php
$today = date('Y-m-d');
$start = post_custom('event_date_start');
$end = post_custom('event_date_end');
?>
<?php if ( $end != null) { ?>
<?php if ($today >= $start && $today <= $end): ?><span class="state txt02">- 開催中 -</span><?php elseif ($today > $end): ?><span class="state">- 終了 -</span><?php endif; ?>
<?php } else { ?>
<?php if ($today == $start): ?><span class="state txt02">- 開催中 -</span><?php elseif ($today > $start): ?><span class="state">- 終了 -</span><?php endif; ?>
<?php } ?>

list_event.php

一覧には開催中(当日)か開催予定のものを開催日の近いものから順に表示(終了イベントは非表示)。
※曜日は自動表示。開催期間の時は「~」で期間表示。

<h3>イベント情報</h3>
<?php
query_posts(
array(
'post_type'=> 'events',
'posts_per_page' => 10,
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_type' => 'DATE',
'meta_key' => 'event_date_start',
'meta_query' => array(
'key' => 'event_date_end',
'value' => date("Y-m-d"),
'compare' => '>='
),
));
?>
<?php if(have_posts()) : while (have_posts()) : the_post(); ?>
<?php
$today = date('Y-m-d');
$date_start = post_custom('event_date_start');
$date_end = post_custom('event_date_end');
?>
<section>
<h3><?php the_title(); ?><?php include("event_state.php"); ?></h3>
<p><?php echo date('Y年m月d日', strtotime($date_start)); ?>
(<?php $week = array("日", "月", "火", "水", "木", "金", "土"); $time = strtotime($date_start); $w = date("w", $time); echo $week[$w]; ?>)
<?php if ( $date_start != $date_end) { ?>~<?php echo date('Y年m月d日', strtotime($date_end)); ?>
(<?php $week = array("日", "月", "火", "水", "木", "金", "土"); $time = strtotime($date_end); $w = date("w", $time); echo $week[$w]; ?>)
<?php } ?></p>
</section>

event_state_class.php

開催の状態毎にClassをつけたい場合、これを使う。
state01:開催予定
state02:開催中
state03:終了


<?php
$today = date('Y-m-d');
$start = post_custom('event_date_start');
$end = post_custom('event_date_end');
?>
<?php if ( $end != null) { ?>
<?php if ($today >= $start && $today <= $end): ?>state02<?php elseif ($today < $start): ?>state01<?php elseif ($today > $end): ?>state03<?php endif; ?>
<?php } else { ?>
<?php if ($today < $start): ?>state01<?php elseif ($today == $start): ?>state02<?php elseif ($today > $start): ?>state03<?php endif; ?>
<?php } ?>