Projekt starten

Bestellschluss-Zeiten und -Tage für Lieferungen in WooCommerce

Bestellschluss-Zeiten

Manche WooCommerce-Shopbetreiber brauchen im Bestellprozess Bestellschluss-Zeiten für Liefertermine. So kann ein Shop zum Beispiel festlegen, ab welcher Uhrzeit eine Lieferung am nächsten Tag nicht mehr möglich ist – etwa wegen der Packzeiten. Mit unserem WooCommerce Delivery Plugin sind Bestellschluss-Zeiten über den Hook „woocommerce_delivery_time_slots_ajax_options“ möglich. Hier ein Beispiel:

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);

Fügen Sie dieses Snippet in die functions.php Ihres Child-Themes ein. Es sperrt Lieferzeiten für den nächsten Tag, sobald die aktuelle Uhrzeit des Kunden nach 9 Uhr liegt. Ändern Sie 09:00 in die gewünschte Uhrzeit und passen Sie den Antworttext an.

Bestellschluss-Tage

Um Tage zu sperren, können Sie einen dieser beiden Filter verwenden:

woocommerce_delivery_disabled_dates
woocommerce_delivery_enabled_dates

Ein Beispiel zum Sperren von Liefertagen: Freitag sperren, wenn in der aktuellen Woche Mittwoch 14:00 Uhr vorbei ist

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);

Ein Beispiel, um gezielt Liefertage freizugeben: Wir verwenden enabledDates und entfernen alle freigegebenen Tage nach dem aktuellen Tag + 2 Tage.

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);