Cómo implementar un buffer global de días en JetAppointment (6 días)

Cómo implementar un buffer global de días en JetAppointment (6 días)

 

En este tutorial aprenderás a implementar un buffer global de días en JetAppointment usando un snippet de código PHP. Esto permitirá que todos tus servicios tengan un bloqueo automático de días antes de que los clientes puedan reservar, por ejemplo, 6 días de anticipación. Ideal para controlar disponibilidad y planificar mejor tus reservas.

📋 ¿Qué logramos?

  • Reservas más controladas: nadie podrá reservar de forma inmediata, sino solo después del buffer configurado.
  • Buffer global: se aplica a todos los servicios y proveedores automáticamente.
  • Compatible con JetAppointment y JetFormBuilder: no necesitas modificar cada servicio individualmente.
  • Flexible y escalable: puedes cambiar la cantidad de días de buffer modificando un solo valor en el código.

🚦 Paso a Paso

1️⃣ Ubicación del código

  • Abre el archivo functions.php de tu child theme o usa un plugin de snippets como «Code Snippets».
  • Vamos a pegar un filtro de WordPress que modifica la disponibilidad del calendario de JetAppointment.

2️⃣ Código completo para buffer global de 6 días

add_filter( 'jet-apb/calendar/custom-schedule', 'alexis_apb_global_buffer_days', 10, 5 );
function alexis_apb_global_buffer_days( $value, $meta_key, $default_value, $provider, $service ) {
    if ( 'days_off' !== $meta_key ) {
        return $value;
    }

    // Normaliza $value a array (a veces llega como string/JSON)
    if ( ! is_array( $value ) ) {
        $decoded = json_decode( (string) $value, true );
        $value   = is_array( $decoded ) ? $decoded : [];
    }

    $buffer_days = 6; // Número de días de buffer (hoy + 6 = 7 días)
    $start_ts    = strtotime( date( 'Y-m-d', current_time( 'timestamp' ) ) ); // Hoy a medianoche WP
    $end_ts      = strtotime( "+".($buffer_days)." days", $start_ts );
    // sumamos un día para que el rango incluya el último día
    $end_ts      = strtotime("+1 day", $end_ts); 

    $buffer_range = [
        'start'          => date( 'd-m-Y', $start_ts ),
        'startTimeStamp' => $start_ts * 1000, // JetAppointment usa milisegundos
        'end'            => date( 'd-m-Y', $end_ts ),
        'endTimeStamp'   => $end_ts * 1000,
        'name'           => 'global-buffer',
        'type'           => 'days_off',
        'editIndex'      => '',
    ];

    $value[] = $buffer_range;
    return $value;
}

3️⃣ ¿Qué hace cada parte del código?

  • add_filter(‘jet-apb/calendar/custom-schedule’, …): Hook de JetAppointment que nos permite modificar la configuración de calendario antes de que se muestre al usuario.
  • $meta_key === ‘days_off’: Comprobamos que estamos alterando los días no disponibles, no otros datos del calendario.
  • Normalización de $value: Convertimos a array cualquier valor que pueda llegar como string o JSON, evitando errores críticos en WordPress.
  • $buffer_days: Número de días que quieres bloquear antes de permitir reservas. En este ejemplo, 6 días.
  • $start_ts y $end_ts: Calculamos la fecha de inicio (hoy) y la fecha final (hoy + buffer_day_