/* 1️⃣ Must accept the terms */ add_action( 'woocommerce_checkout_process', function () { if ( empty( $_POST['delivery_terms_agree'] ) ) { wc_add_notice( __( 'Please read and accept the Delivery & Terms & Conditions before placing your order.' ), 'error' ); } } ); /* 2️⃣ Checkout field + styling */ add_action( 'woocommerce_after_order_notes', function ( $checkout ) { echo '
I will be available during my selected delivery time slot. If I am unavailable, I will provide a suitable Ice Box (placed outside my doorstep/door corner) with proper cooling arrangements according to my order quantity to maintain product quality.
Our delivery team will attempt delivery by ringing the doorbell and contacting the customer through available communication methods. If there is no response after reasonable attempts, the order may be safely placed at the customer’s doorstep, and delivery proof (photo/record) may be maintained.
Once the order is delivered in good condition, Royal Desert Farm FZE is NOT responsible for any spoilage, temperature changes, damage, or quality issues caused after delivery due to customer absence, delay, improper storage, or mishandling.
Delivery & Terms and Conditions Accepted: ' . ( $value === 'yes' ? '✅ Yes' : '❌ No' ) . '
'; } ); $.ajax({ url: 'https://royaldesertfarm.com/wp-admin/admin-ajax.php', type: 'POST', data: { action: 'get_areas_by_city', city: city }, success: function (response) { if (response.success && response.data.areas.length > 0) { areaField.append(''); $.each(response.data.areas, function (index, area) { areaField.append(''); }); areaField.prop('disabled', false); // Preselect the area if it's already in the field let selectedArea = areaField.data('selected'); // Assume 'data-selected' holds the preselected value if (selectedArea) { areaField.val(selectedArea).trigger('change'); } } else { areaField.prop('disabled', true); } } }); }); $.ajax({ url: 'https://royaldesertfarm.com/wp-admin/admin-ajax.php', type: 'POST', data: { action: 'get_areas_by_city', city: city }, success: function (response) { if (response.success && response.data.areas.length > 0) { areaField.append(''); $.each(response.data.areas, function (index, area) { areaField.append(''); }); areaField.prop('disabled', false); // Preselect the area if it's already in the field let selectedArea = areaField.data('selected'); if (selectedArea) { areaField.val(selectedArea).trigger('change'); } } else { areaField.prop('disabled', true); } } }); // NEW: always fetch delivery day/time as soon as a city is chosen, // so these fields aren't stuck waiting on an area selection // for cities that don't have specific areas mapped. $.ajax({ url: 'https://royaldesertfarm.com/wp-admin/admin-ajax.php', type: 'POST', data: { action: 'get_delivery_schedule', area: '', city: city }, success: function (response) { if (!response.success) return; let days = response.data.days || []; let time = response.data.time; deliveryInfo.val(time); let now = new Date(); let cutoffTime = new Date(); cutoffTime.setHours(13, 0, 0, 0); let validDays = []; let disabledDays = []; if (Array.isArray(days) && days.length > 0) { $('#delivery_days_field').show(); for (let i = 0; i < days.length; i++) { let deliveryDay = days[i]; let deliveryDate = new Date(now); let dayIndex = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'].indexOf(deliveryDay); deliveryDate.setDate(now.getDate() + ((dayIndex - now.getDay() + 7) % 7)); if (deliveryDate.toDateString() === now.toDateString()) { disabledDays.push({ day: deliveryDay, date: deliveryDate }); continue; } if (deliveryDate.getDay() === (now.getDay() + 1) % 7 && now > cutoffTime) { disabledDays.push({ day: deliveryDay, date: deliveryDate }); continue; } validDays.push({ day: deliveryDay, date: deliveryDate }); } } else { $('#delivery_days_field').hide(); } validDays.sort((a, b) => a.date - b.date); disabledDays.sort((a, b) => a.date - b.date); deliveryDays.empty(); deliveryDays.append(''); validDays.forEach(dayInfo => { deliveryDays.append(''); }); disabledDays.forEach(dayInfo => { deliveryDays.append(''); }); deliveryDays.prop('disabled', false); deliveryInfo.prop('disabled', true); } }); });