U ovom članku opisujemo kako u WooCommerce Bookings detektirati kad korisnik odabere petak, subotu ili nedjelju kao checkout i automatski pomaknuti završni datum na iduću nedjelju. Takva prilagodba je česta potreba kod tjednih paketa, vikend aranžmana ili smještaja koji se iznajmljuje tjedno.
WooCommerce Bookings po defaultu omogućuje korisniku da odabere bilo koji datum za check-in i check-out. Ako proizvod ima trajanje tjedno, završni datum osim nedjelje ne vrijedi. Cilj je uhvatiti checkout klik i, ako padne na petak, subotu ili nedjelju, promijeniti ga u nedjelju.
Umjesto detektiranja klika u kalendaru ili brojanja klikova, najbolje je pratiti change event na skrivenim inputima koje Bookings koristi za datum.
input.booking_date_day za check-ininput.booking_to_date_day za check-outDate objekt i provjeravamo getDay()jQuery(function($){
$('input.booking_date_day, input.booking_to_date_day').on('change', function(e){
const isCheckout = $(e.target).hasClass('booking_to_date_day');
const prefix = isCheckout ? 'booking_to_date' : 'booking_date';
const day = parseInt($(`input.${prefix}_day`).val(), 10);
const month = parseInt($(`input.${prefix}_month`).val(), 10);
const year = parseInt($(`input.${prefix}_year`).val(), 10);
if (!day || !month || !year) return;
const selectedDate = new Date(year, month - 1, day);
const weekday = selectedDate.getDay(); // 0 = nedjelja, 5 = petak, 6 = subota
console.log(`Promjena na ${isCheckout ? 'checkout' : 'checkin'} datumu: ${year}-${month}-${day}`);
console.log('Weekday:', weekday);
if (isCheckout && (weekday === 5 || weekday === 6)) {
const nextSunday = new Date(selectedDate);
if (weekday !== 0) {
nextSunday.setDate(selectedDate.getDate() + (7 - weekday));
}
const newDay = String(nextSunday.getDate()).padStart(2, '0');
const newMonth = String(nextSunday.getMonth() + 1).padStart(2, '0');
const newYear = nextSunday.getFullYear();
$(`input.booking_to_date_day`).val(newDay);
$(`input.booking_to_date_month`).val(newMonth);
$(`input.booking_to_date_year`).val(newYear);
alert('Check-out mora biti u nedjelju. Datum je automatski prilagođen.');
}
});
});
Ovaj pristup koristi postojeće inpute i standardne change evente, bez ovisnosti o internim eventima plugina ili fragilnim brojačima klikova. Možeš ga proširiti dodatnim validacijama na serveru, prilagođenim porukama ili automatskim blokadama termina kroz PHP filtere.
Ako ti treba full plugin paket, frontend overlay za debug ili automatski Cypress testovi – samo javi i pripremit ćemo sljedeći korak.
Sadržaj