// Validación de hora según día y servicio (Actualizado 2026)
add_filter('wpcf7_validate_text*', 'tg_validar_horario', 20, 2);
add_filter('wpcf7_validate_text', 'tg_validar_horario', 20, 2);
function tg_validar_horario($result, $tag) {
if ($tag->name != 'hora') return $result;
$hora = $_POST['hora'] ?? '';
$servicio = strtolower($_POST['servicio'] ?? '');
$fecha = $_POST['fecha'] ?? '';
// Formato HH:MM
if (!preg_match('/^\d{2}:\d{2}$/', $hora)) {
$result->invalidate($tag, "Introduce la hora en formato HH:MM, por ejemplo 13:30.");
return $result;
}
list($h, $m) = explode(':', $hora);
$min = ($h * 60) + $m;
$dia_semana = date('N', strtotime($fecha)); // 1=Lunes, 7=Domingo
// 1. Validación de fecha (no hoy)
$hoy = date('Y-m-d');
if ($fecha == $hoy) {
$result->invalidate($tag, "No se puede reservar para el mismo día.");
return $result;
}
// 2. Lunes y Martes: CERRADO
if ($dia_semana == 1 || $dia_semana == 2) {
$result->invalidate($tag, "Lunes y martes estamos cerrados por descanso.");
return $result;
}
// 3. Miércoles, Jueves y Domingos: Solo Almuerzo (13:30 a 16:30)
if ($dia_semana == 3 || $dia_semana == 4 || $dia_semana == 7) {
if ($servicio == 'cena') {
$result->invalidate($tag, "No hay servicio de cena este día.");
} elseif ($min < (13*60+30) || $min > (16*60+30)) {
$result->invalidate($tag, "El horario de almuerzo es de 13:30 a 16:30.");
}
}
// 4. Viernes y Sábados: Almuerzo y Cena
if ($dia_semana == 5 || $dia_semana == 6) {
if ($servicio == 'almuerzo') {
if ($min < (13*60+30) || $min > (16*60+30)) {
$result->invalidate($tag, "El horario de almuerzo es de 13:30 a 16:30.");
}
} elseif ($servicio == 'cena') {
if ($min < (20*60) || $min > (23*00)) { // Ajustado a las 23:00 según tu petición
$result->invalidate($tag, "El horario de cena los viernes y sábados es de 20:00 a 23:00.");
}
}
}
return $result;
}