サポート » プラグイン » XO Event Calendarで営業日表示

  • 休みを設定した以外の日にちの日数を表示することは可能でしょうか
    例えば
    2018年1月に10日休みを設定していれば
    営業日数21日
    という感じで月、年で営業日数を表示させたいです

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • こんにちは

    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 );
1件の返信を表示中 - 1 - 1件目 (全1件中)
  • このトピックに返信するにはログインが必要です。