こんにちは
XO Event Calendar の作者です。
説明すると長くなりそうなので、サンプルコードをご覧ください。
サンプルコードは、カレンダーの下に「all」の休日を対象にした営業日数(年および月)を表示するようにしています。
サンプルコード: テーマの functions.php などに、
function get_holiday_count( $start_datetime, $end_datetime, $holiday_name ) {
$weeks = array( 'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat' );
$holiday_settings = get_option( 'xo_event_calendar_holiday_settings' );
$counter = 0;
if ( $holiday_settings && $holiday_settings[$holiday_name] ) {
$period = new DatePeriod( $start_datetime, new DateInterval( 'P1D' ), $end_datetime );
foreach ( $period as $datetime ) {
$timestamp = $datetime->getTimestamp();
$holiday_setting = $holiday_settings[$holiday_name];
if ( ( $holiday_setting['dayofweek'][$weeks[date( 'w', $timestamp )]] ||
strpos( $holiday_setting['special_holiday'], date( 'Y-m-d', $timestamp ) ) !== false ) &&
strpos( $holiday_setting['non_holiday'], date( 'Y-m-d', $timestamp ) ) === false
) {
++$counter;
}
}
}
return $counter;
}
function my_xo_event_calendar_month( $html, $args ) {
$holiday_name = 'all'; // 休日の名前
if ( $args['id'] == 'xo-event-calendar-1' ) {
$holiday_settings = get_option( 'xo_event_calendar_holiday_settings' );
if ( $holiday_settings && $holiday_settings[$holiday_name] ) {
$start = new DateTime( "{$args['year']}-{$args['month']}-01" );
$end = new DateTime( date( 'Y-m-d', mktime( 0, 0, 0, $args['month'] + 1, 1, $args['year'] ) ) );
$days = $start->diff( $end )->days;
$holiday_count = get_holiday_count( $start, $end, $holiday_name );
$month_count = $days - $holiday_count;
$html .= "<p>営業日数({$args['month']}月): {$month_count}日<p>";
$start = new DateTime( "{$args['year']}-01-01" );
$end = new DateTime( date( 'Y-m-d', mktime( 0, 0, 0, 1, 1, $args['year'] + 1 ) ) );
$days = $start->diff( $end )->days;
$holiday_count = get_holiday_count( $start, $end, $holiday_name );
$year_count = $days - $holiday_count;
$html .= "<p>営業日数({$args['year']}年): {$year_count}日<p>";
}
}
return $html;
}
add_filter( 'xo_event_calendar_month', 'my_xo_event_calendar_month', 10, 2 );