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