'PublicHoliday', 'slots' => array( $range ), ); } return $slots_source; } /** * 週末モード用のデフォルト祝日営業時間を追加する。 * * @param array $slots_source 営業時間スロットの配列。 * @return array 祝日スロット追加後の配列。 */ private static function add_weekend_hours_for_holidays( array $slots_source ) { $slots_source[] = array( 'day_key' => 'PublicHoliday', 'slots' => array( array( 'opens' => '10:00', 'closes' => '17:00', ), ), ); return $slots_source; } /** * スロットから時間範囲を抽出する。 * * @param array $slot 単一の営業時間スロット。 * @return array 時間範囲の配列。 */ private static function extract_slot_ranges( array $slot ) { if ( ! empty( $slot['slots'] ) && is_array( $slot['slots'] ) ) { return $slot['slots']; } return array( array( 'opens' => $slot['opens'] ?? '', 'closes' => $slot['closes'] ?? '', ), ); } /** * スロットソースを OpeningHoursSpecification スキーマに変換する。 * * @param array $slots_source 営業時間スロットの配列。 * @return array OpeningHoursSpecification スキーマの配列。 */ private static function convert_to_schema( array $slots_source ) { $opening_hours = array(); foreach ( $slots_source as $slot ) { $day_of_week = $slot['day_key'] ?? $slot['day'] ?? ''; if ( empty( $day_of_week ) ) { continue; } $slot_ranges = self::extract_slot_ranges( $slot ); foreach ( $slot_ranges as $range ) { if ( empty( $range['opens'] ) || empty( $range['closes'] ) ) { continue; } $opening_hours[] = array( '@type' => 'OpeningHoursSpecification', 'dayOfWeek' => $day_of_week, 'opens' => $range['opens'], 'closes' => $range['closes'], ); } } return $opening_hours; } }