Démarrer un projet

Heures et dates limites de commande pour la livraison WooCommerce

Heures limites

Certains marchands WooCommerce ont besoin d’heures limites pour les créneaux de livraison lors de la commande. Un marchand peut ainsi définir l’heure à partir de laquelle une livraison le lendemain n’est plus possible, par exemple à cause des temps de préparation. Avec notre plugin WooCommerce Delivery, les heures limites sont possibles grâce au hook « woocommerce_delivery_time_slots_ajax_options ». Voici un exemple de code :

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

Ajoutez cet extrait au fichier functions.php de votre thème enfant. Il supprime les créneaux de livraison du lendemain dès que l’heure actuelle du client dépasse 9 h. Remplacez 09:00 par l’heure souhaitée et adaptez le texte de réponse.

Dates limites

Pour désactiver des dates, vous pouvez utiliser l’un de ces deux filtres :

woocommerce_delivery_disabled_dates
woocommerce_delivery_enabled_dates

Exemple pour désactiver des dates de livraison : désactiver le vendredi si le mercredi 14 h de la semaine en cours est passé

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

Exemple pour activer des dates de livraison précises : nous utilisons enabledDates et supprimons toutes les dates activées au-delà du jour actuel + 2 jours.

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