gooodmark

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

516bookmark

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

※イベント情報はカスタム投稿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 } ?>