Skip to content

Instantly share code, notes, and snippets.

@marushu
Last active August 29, 2015 13:56
Show Gist options
  • Save marushu/8893684 to your computer and use it in GitHub Desktop.
Save marushu/8893684 to your computer and use it in GitHub Desktop.
ACF(Advanced Custom Fields)プラグインを使って、館内イベントのデータを取得、直近のイベント10分前からイベントを出力させる
<section id="data_inner">
<?php
// 緊急のお知らせ用カウンタ
$boxcounter = 0;
// サイトの「今日」の日付を取得
$local_timestamp = current_time( 'timestamp' ); // ローカルのタイムスタンプ
$now = gmdate( 'H', $local_timestamp ); // ローカルの時刻文字列
//echo "nowを出力" . $now; // 現在時刻の「時」を出力
// 月間分の設定
$select_kannai_monthly = get_field( 'select_kannai_monthly' );
$today_day = gmdate( 'j', $local_timestamp ); // integer
// 今日の「日(数)」をゲット
$today_day = intval( $today_day - 1 );
$select_kannai_event = $select_kannai_monthly[ $today_day ][ 'daily_event' ];
if( $select_kannai_event ) {
switch( $select_kannai_event ) {
case $select_kannai_event == 'week_day' :
$post_type = 'event_weekday';
break;
case $select_kannai_event == 'saturday' :
$post_type = 'saturday';
break;
case $select_kannai_event == 'holiday' :
$post_type = 'event_holiday';
break;
case $select_kannai_event == 'special' :
$post_type = 'event_special';
break;
}
}
?>
<?php
$args = array(
'post_type' => $post_type,
'numberposts' => -1,
);
$kannai_events = get_posts( $args );
foreach( $kannai_events as $each_kannai_event ) :
// 各イベントのdiv.each_creature_event に番号を付与するためのカウンタ
if( $each_kannai_event ) :
// 各イベントリスト用カウンタ
$counter = 0;
// サイトの「今日」の日付を取得
$local_timestamp_now = current_time( 'timestamp' ); // ローカルのUnixタイムスタンプ
$now = gmdate( 'Y/m/d', $local_timestamp ); // ローカルの年月日
// Unixタイム成形用の年月日
$today_y = gmdate( 'Y', $local_timestamp );
// Unixタイム成形用の年月日
$today_m = gmdate( 'm', $local_timestamp );
// Unixタイム成形用の年月日
$today_d = gmdate( 'd', $local_timestamp );
?>
<ul class="each_creature_event">
<?php
$urgent_info_repeater = get_field( 'urgent_info_repeater', $each_kannai_event->ID );
foreach( $urgent_info_repeater as $each_urgent_info ) :
// カウントアップ
$boxcounter++;
// 緊急お知らせテキスト
$urgent_info_text = $each_urgent_info[ 'urgent_info_text' ];
// 表示期間
$urgent_display = $each_urgent_info[ 'urgent_display' ];
if( $urgent_display == "allday" ) {
$urgent_display_start = "09:00";
$urgent_display_time = "540";
}
if( $urgent_display == "period" ) {
// スタート時間
$urgent_display_start = $each_urgent_info[ 'urgent_display_start' ];
// 表示させる時間(分)
$urgent_display_time = $each_urgent_info[ 'urgent_display_time' ];
}
// 時間計算
$urgent_time_format = $now . ' ' . $urgent_display_start;
$urgent_start_time_unix = strtotime( $urgent_time_format );
$urgent_require_time_unix = $urgent_display_time * 60;
$urgent_display_start_before_10 = $urgent_display_start -( 10 * 60 );
$urgent_end_time_unix = $urgent_start_time_unix + $urgent_require_time_unix;
if( $each_urgent_info ) :
?>
<li class="urgent_info <?php
if( $urgent_end_time_unix < $local_timestamp_now ) {
echo "ended";
} elseif( $urgent_display_start_before_10 < $local_timestamp_now && $local_timestamp_now < $urgent_start_time_unix ) {
echo "coming_soon";
} elseif( $urgent_start_time_unix < $local_timestamp_now ) {
echo "just_now";
} elseif( $local_timestamp_now < $urgent_display_start_before_10 ) {
echo "still_start";
}
?>" id="urgent_<?php echo $boxcounter; ?>">
<p id="<?php echo $urgent_end_time_unix; ?>" class="btn_close" title="閉じる">×</p>
<?php if( $urgent_info_text ) : ?><p><?php echo $urgent_info_text; ?></p><?php endif; ?>
</li>
<?php endif; endforeach; ?>
<?php
$event_kannnai = get_field( 'event_kannnai', $each_kannai_event->ID );
foreach( $event_kannnai as $single_event ) :
// 定期イベント名
$single_event_name = esc_html( $single_event[ 'event_name_kannnai' ] );
// イベント所要時間
$single_event_require_time = esc_html( $single_event[ 'event_require_kannnai' ] );
// イベント会場
$single_event_place = esc_html( $single_event[ 'event_place_kannai' ] );
// イベント会場へのリンク
$single_event_link = esc_url( $single_event[ 'event_place_link_kannai' ] );
// イベント時間の配列
$single_event_times = $single_event[ 'event_times_kannai' ];
?>
<?php if( $single_event_name ) : ?>
<?php
// $boxcounter カウントアップ
$boxcounter++;
?>
<?php
foreach( $single_event_times as $event_time ) :
?>
<?php
// 連番用カウンタ
$counter++;
// イベントの各時間の時
$each_event_time_hour = $event_time[ 'event_start_hour_kannnai' ];
// イベントの各時間の分
$each_event_time_minute = $event_time[ 'event_start_minute' ];
// イベントの各時間の10分前
$each_event_time_minute_before_10 = $event_time[ 'event_start_minute' ] + 10;
// ○○:○○ に整形
$hour_minute = $each_event_time_hour . ':' . $each_event_time_minute;
// ○○:○○ に整形
$display_time = '<li style="border-bottom: 1px dotted #CCC;" class="time_' . $counter . '">' . $hour_minute . '</li>';
// 現在の日時から要素を取得
$today = getdate();
// Y/m/d H:i 文字列整形
$time_format = $now . ' ' . $hour_minute;
// イベントの実際の開始時刻のUnixtimestamp
$actual_event_start_time_unix = strtotime( $time_format );
// イベントの実際の開始時間を整形したもの
$transform_actual = gmdate( 'Y/m/d H:i', $actual_event_start_time_unix );
// イベント開始10分前のUnixtimestamp
$event_start_befor_10_unix = $actual_event_start_time_unix - ( 10 * 60 );
// イベント開始10分前を整形したもの
$transform_before_10 = gmdate( 'Y/m/d H:i', $event_start_befor_10_unix );
// 所要時間をUnixtimestampへ変換
$single_event_require_time_unix = $single_event_require_time * 60;
// イベントが終わるであろう予測時間( 現在時刻 + 所要時間 )
$maybe_event_end_time_unix = $local_timestamp_now + $single_event_require_time_unix;
// 実際にイベントが終わる時間
$actual_event_end_time_unix = $actual_event_start_time_unix + $single_event_require_time_unix;
?>
<li class="event_list <?php
if( $actual_event_end_time_unix < $local_timestamp_now ) {
echo "ended";
} elseif( $event_start_befor_10_unix < $local_timestamp_now && $local_timestamp_now < $actual_event_start_time_unix ) {
echo "coming_soon";
} elseif( $actual_event_start_time_unix < $local_timestamp_now ) {
echo "just_now";
} elseif( $local_timestamp_now < $event_start_befor_10_unix ) {
echo "still_start";
}
?>" id="event_<?php echo $counter; ?>">
<p title="閉じる" class="btn_close" id="<?php echo $actual_event_end_time_unix; ?>">×</p>
<?php if( $hour_minute ) : ?><p><span class="check"><?php echo $hour_minute; ?></span>より<?php endif; ?>
<?php if( $single_event_place ) : ?><?php echo $single_event_place; ?>で<?php endif; ?>
<?php if( $single_event_name ) : ?>「<span class="check"><?php echo $single_event_name ?></span>」がはじまります。<?php endif; ?>
</li>
<?php endforeach; ?>
<?php endif; ?>
<?php endforeach; ?>
</ul>
<?php endif; endforeach; ?>
</section>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment