Iniciar un proyecto

Horas y fechas límite de pedido para entregas en WooCommerce

Horas límite

Algunos comerciantes de WooCommerce necesitan horas límite para las franjas de entrega durante el proceso de compra. Así, la tienda puede definir a partir de qué hora ya no es posible la entrega al día siguiente, por ejemplo por los tiempos de preparación. Con nuestro plugin WooCommerce Delivery, las horas límite son posibles mediante el hook «woocommerce_delivery_time_slots_ajax_options». Este es un código de ejemplo:

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

Añada este fragmento al archivo functions.php de su tema hijo. Elimina las franjas de entrega del día siguiente en cuanto la hora actual del cliente pasa de las 9:00. Cambie 09:00 por la hora que necesite y adapte el texto de respuesta.

Fechas límite

Para desactivar fechas puede usar uno de estos dos filtros:

woocommerce_delivery_disabled_dates
woocommerce_delivery_enabled_dates

Ejemplo para desactivar fechas de entrega: desactivar el viernes si ya ha pasado el miércoles a las 14:00 de la semana actual

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

Ejemplo para activar fechas de entrega concretas: usamos enabledDates y eliminamos todas las fechas activadas posteriores al día actual + 2 días.

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