• 10-10-2024, 02:34:55
    #1
    Selamlar,

    Bir catering firmasi var, yerel saate gore 17:00 ye kadar verilen siparisleri ertesi gun teslimat tarihi ve diledigi saati secilmesine izin veriliyor.
    Fakat biz istiyoruz ki eger saat 17:00den sonra ise ertesi gunun tarihi secilmesine izin verilmesin.

    Bunu custom kod veya eklenti ile yapabilecek arkadas varsa cozum sekli ve ucretiyle birlikte PM atabilir mi?
  • 10-10-2024, 02:39:54
    #2
    chatgpt



    WooCommerce'de bu tür bir teslimat saat sınırlamasını uygulamak için, bir custom function (özel fonksiyon) yazmanız ve bunu temanızın functions.php dosyasına eklemeniz gerekiyor. Bu fonksiyon, sipariş verme zamanına göre teslimat tarihini ve saatini kısıtlayacaktır.
    İlgili işlemleri adım adım anlatacağım:
    1. Önce Zamanı Kontrol Etme: Siparişin saat 17:00'den önce mi yoksa sonra mı verildiğini kontrol etmeniz gerekecek. Bunu yaparken yerel saati kullanmak için WordPress'in tarih ve saat fonksiyonlarını kullanabiliriz.
    2. Teslimat Tarih ve Saat Seçimini Kısıtlama: Sipariş saati 17:00'den sonra ise, müşterinin teslimat tarihini seçmesini engelleyebilirsiniz.
    Aşağıdaki kod, siparişin verildiği saate göre ertesi gün teslimatın seçilmesine izin vermeyecek şekilde WooCommerce'e entegre edilebilir:

    // functions.php dosyasına ekleyin
    add_filter('woocommerce_checkout_fields', 'customize_delivery_date_based_on_time');
    
    function customize_delivery_date_based_on_time($fields) {
        // Türkiye saat dilimini ayarlıyoruz
        date_default_timezone_set('Europe/Istanbul');
        
        // Şu anki saat
        $current_hour = date('H');
        $current_day = date('Y-m-d');
    
        // Eğer saat 17:00'den sonra ise
        if ($current_hour >= 17) {
            // Teslimat tarih alanını bul ve sınırlamalar ekle
            $fields['shipping']['delivery_date']['custom_attributes'] = array(
                'min' => date('Y-m-d', strtotime($current_day . ' + 2 days')) // Teslimat tarihi bugünden +2 gün olmalı
            );
        } else {
            // Saat 17:00'den önce ise, ertesi gün seçilebilsin
            $fields['shipping']['delivery_date']['custom_attributes'] = array(
                'min' => date('Y-m-d', strtotime($current_day . ' + 1 day')) // Ertesi gün seçilebilsin
            );
        }
    
        return $fields;
    }

    Açıklama:

    • Bu kod, checkout sırasında sipariş veren müşterinin yerel saatine göre işlemi yapıyor. Eğer sipariş saati 17:00'den sonraysa, minimum teslimat tarihi ertesi gün yerine bir sonraki gün olarak ayarlanıyor.
    • Eğer saat 17:00'den önce ise, müşteri ertesi gün teslimat seçimini yapabilir.

    Uygulama:

    1. WordPress yönetim panelinizde Appearance (Görünüm) -> Theme File Editor (Tema Dosya Editörü) kısmına gidin.
    2. Sağ menüden functions.php dosyasını açın.
    3. Yukarıdaki kodu dosyanın sonuna ekleyin ve kaydedin.
    Bu kod, siparişin verildiği saat dilimine göre teslimat tarihini otomatik olarak kısıtlayacaktır.
  • 10-10-2024, 02:51:46
    #3
    Merhaba belki işe yarar temanızı bilmiyorum

    function disable_next_day_delivery_after_cutoff($available_dates) {
        date_default_timezone_set('Europe/Istanbul'); // Yerel saat dilimini ayarlayın
        $current_time = current_time('H:i');
        $cutoff_time = '17:00'; // Saat 17:00 cutoff saati
    
        // Eğer saat 17:00'den sonra ise ertesi günün tarihini kaldır
        if ($current_time > $cutoff_time) {
            $tomorrow = date('Y-m-d', strtotime('+1 day'));
            if (($key = array_search($tomorrow, $available_dates)) !== false) {
                unset($available_dates[$key]);
            }
        }
    
        return $available_dates;
    }
    add_filter('woocommerce_delivery_dates_available', 'disable_next_day_delivery_after_cutoff');