Kontakt Kalkulator
en

WooCommerce Bookings – Vikend check-out automatski pomak na nedjelju

MikiMinuta čitanja: 2

Kako automatski pomaknuti WooCommerce Bookings checkout na nedjelju

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.

Problematika i cilj

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.

Rješenje bez fragilnih brojača

Umjesto detektiranja klika u kalendaru ili brojanja klikova, najbolje je pratiti change event na skrivenim inputima koje Bookings koristi za datum.

  1. Slušamo obje grupe inputa:
    • input.booking_date_day za check-in
    • input.booking_to_date_day za check-out
  2. U handleru dohvaćamo vrijednosti dana, mjeseca i godine iz pripadajućih inputa
  3. Sastavljamo Date objekt i provjeravamo getDay()
  4. Ako je checkout petak/subota/nedjelja, izračunamo iduću nedjelju
  5. Ažuriramo vrijednosti u inputima i javimo korisniku alert-om

Implementacija u JavaScriptu

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.');
}
});
});

Zaključak i dalje mogućnosti

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.

Miki

Niste sigurni što učiniti sljedeće?

Obratite nam se i pronađite odgovore na svoja pitanja.

Kontakt

Želite znati kako radimo?

Pogledajte neke od projekata na kojima smo radili.

Pogledajte naše radove