Project starten

Besteldeadlines (tijden en data) voor WooCommerce-leveringen

Besteldeadlines

Sommige WooCommerce-shops hebben besteldeadlines nodig voor levertijden bij het afrekenen. Zo kan een winkel een tijdstip instellen waarna levering de volgende dag niet meer kan, bijvoorbeeld door inpaktijden of andere redenen. Met onze plugin WooCommerce Delivery kan dat via de hook “woocommerce_delivery_time_slots_ajax_options”. Hieronder zie je een voorbeeldcode:

add_filter('woocommerce_delivery_time_slots_ajax_options', function($deliveryTimeOptions, $selectedDateObject, $currentDate) {
    $cutOffTime = '09:00';
    $tomorrowDate = new DateTime('tomorrow');
    $tomorrowDateFormatted = $tomorrowDate->format('Y-m-d');
    $selectedDateFormatted = $selectedDateObject->format('Y-m-d');
    if($selectedDateFormatted == $tomorrowDateFormatted) {
        $currentDateTimeCutOff = new DateTime($cutOffTime);
        if($currentDate >= $currentDateTimeCutOff) {
            $deliveryTimeOptions = array(
                '' => '09 am cut off. Please select the next date.'
            );
        }
    }
    return $deliveryTimeOptions;
}, 20, 3);

Zet dit fragment in de functions.php van je childthema. Het schrapt levertijden voor de volgende dag zodra de huidige tijd van de gebruiker na 9 uur ’s ochtends is. Verander 09:00 in de tijd die je nodig hebt en pas de antwoordtekst aan.

Data uitschakelen

Om data uit te schakelen, gebruik je een van deze twee filters:

woocommerce_delivery_disabled_dates
woocommerce_delivery_enabled_dates

Voorbeeld om leverdata uit te schakelen: vrijdag uitschakelen als woensdag 14:00 van de huidige week voorbij is

add_filter('woocommerce_delivery_disabled_dates', function($disabledDates) {
    $now = new DateTime();
    $today = new DateTime();
    // Ensure 'this Wednesday' refers to the current week's Wednesday
    $wednesdayCutoff = new DateTime('Wednesday this week 14:00');
    // $wednesdayCutoff = new DateTime('Tuesday this week 14:00');
    $friday = new DateTime('Friday this week');
    // If today is Wednesday and it's past 2 PM, or if today is after Wednesday, disable Friday
    if ($now > $wednesdayCutoff) {
        $disabledDates[] = $friday->format('Y-m-d');;
    }
    return $disabledDates;
}, 10, 1);

Voorbeeld om bepaalde leverdata in te schakelen: we gebruiken enabledDates en halen alle ingeschakelde data na vandaag + 2 dagen weg.

add_filter('woocommerce_delivery_enabled_dates', function($enabledDates) {
	date_default_timezone_set('Asia/Jerusalem'); // Set timezone to Israel
	$now = new DateTime();
    sort($enabledDates); // Ensure dates are in ascending order
    $filteredEnabledDates = [];
    foreach ($enabledDates as $date) {
        $availableDate = new DateTime($date . ' 14:00');
        $cutoff = clone $availableDate;
        $cutoff->modify('-2 days');
        if ($now <= $cutoff) {
            $filteredEnabledDates[] = $availableDate->format('Y-m-d');
        }
    }
    return $filteredEnabledDates;
}, 10, 1);