Sari la conținut
WEBLURE

WooCommerce · Reguli de livrare

WooCommerce: selectarea datei și intervalului de livrare

Vrei ca clientul să aleagă ziua și intervalul de livrare. WooCommerce nu are asta nativ; se adaugă un câmp la checkout, cu validare și salvare în comandă.

  • Câmp de dată la checkout
  • Zile permise
  • Validare
  • Salvare în comandă
  • Afișare în email

Răspuns în aceeași zi lucrătoare Ofertă fixă Fără parole

Vrei să ți-o facem noi?

Doar două câmpuri. Răspundem în aceeași zi lucrătoare, cu ofertă fixă.

+ Telefon și detalii (opțional)

Răspuns rapid

WooCommerce nu are selector de dată de livrare nativ. Cu checkout-ul clasic adaugi un câmp cu hook-ul woocommerce_after_order_notes, îl validezi în woocommerce_checkout_process și îl salvezi în comandă cu woocommerce_checkout_create_order, apoi îl afișezi în administrare și în emailuri. Hook-urile checkout-ului clasic nu randează câmpuri în checkout-ul cu blocuri; pentru blocuri WooCommerce oferă API-ul woocommerce_register_additional_checkout_field() (tipuri: text, select, checkbox și date; locații: contact, address, order), deci un câmp de tip dată se poate înregistra și acolo.

Ce ai nevoie

  • Regulile: zile lucrătoare, termen minim, capacitate
  • Tema copil sau un plugin de fragmente de cod
  • Știi dacă folosești checkout clasic sau cu blocuri
  • Un mediu de test

Pașii, pe rând

  1. 1Stabilește regulileCe zile se livrează (de exemplu luni–vineri), cât timp minim înainte se poate alege, ce intervale orare există și câte livrări pe interval poți face (capacitate).
  2. 2Verifică tipul de checkoutCu checkout-ul clasic, fragmentul de mai jos funcționează. Cu cel cu blocuri, câmpurile adăugate prin hook-urile clasice nu apar; folosești API-ul oficial woocommerce_register_additional_checkout_field() (tip „date”, locația „order”) sau un plugin compatibil cu blocurile.
  3. 3Adaugă câmpul la checkoutCu woocommerce_after_order_notes afișezi un câmp de tip dată, cu data minimă setată (de exemplu mâine) și, dacă vrei, un selector de interval orar.
  4. 4Validează alegereaÎn woocommerce_checkout_process verifici că data e completată, că nu e în trecut și că ziua e permisă; altfel adaugi o eroare cu wc_add_notice.
  5. 5Salvează în comandăCu woocommerce_checkout_create_order salvezi data în meta-datele comenzii, compatibil cu HPOS.
  6. 6Afișează data pentru tine și pentru clientÎn administrare, sub adresa de livrare, și în emailul comenzii, ca să o vadă și clientul și echipa din depozit.
  7. 7TesteazăAlege o zi permisă, una nepermisă și lasă câmpul gol. Verifică și emailul, și comanda în administrare.

Câmp de dată la checkout clasic (schelet)

php
add_action('woocommerce_after_order_notes', function ($checkout) {
    woocommerce_form_field('wl_data_livrare', [
        'type'              => 'date',
        'label'             => 'Data dorită pentru livrare',
        'required'          => true,
        'custom_attributes' => ['min' => date('Y-m-d', strtotime('+1 day'))],
    ], $checkout->get_value('wl_data_livrare'));
});

add_action('woocommerce_checkout_process', function () {
    $d = isset($_POST['wl_data_livrare']) ? sanitize_text_field(wp_unslash($_POST['wl_data_livrare'])) : '';
    if (!$d) {
        wc_add_notice('Alege data de livrare.', 'error');
        return;
    }
    $ts = strtotime($d);
    if (!$ts || $ts < strtotime('tomorrow') || in_array((int) date('N', $ts), [6, 7], true)) {
        wc_add_notice('Livrăm de luni până vineri, începând cu ziua de mâine.', 'error');
    }
});

add_action('woocommerce_checkout_create_order', function ($order) {
    if (!empty($_POST['wl_data_livrare'])) {
        $order->update_meta_data('_wl_data_livrare', sanitize_text_field(wp_unslash($_POST['wl_data_livrare'])));
    }
});

add_action('woocommerce_admin_order_data_after_shipping_address', function ($order) {
    $d = $order->get_meta('_wl_data_livrare');
    if ($d) {
        echo '<p><strong>Data livrării:</strong> ' . esc_html($d) . '</p>';
    }
});

Fragmentele de cod sunt scheleturi: le adaptezi la magazinul tău și le testezi întâi pe un mediu de test (staging). Funcționează în checkout-ul clasic. Pentru checkout cu blocuri alegi un plugin compatibil sau o implementare dedicată.

Nu vrei să te complici sau ai rămas blocat? Scrie-ne și o facem noi.

Scrie-ne pe WhatsAppCere ofertă

Mai multe detalii

Cauze frecvente și greșeli de evitatDacă pașii de mai sus nu au rezolvat problema
1

Câmpul nu apare la checkout

De ce: Magazinul folosește checkout-ul cu blocuri, unde hook-urile clasice nu randează câmpul.

Ce faci: Treci temporar pe checkout-ul clasic pentru test sau folosește un plugin compatibil cu blocurile.

2

Data nu se salvează în comandă

De ce: Câmpul are alt nume decât cel citit la salvare.

Ce faci: Verifică numele identic în afișare, validare și salvare.

3

Clientul alege o zi nelucrătoare

De ce: Câmpul de tip dată nu poate exclude singur zile.

Ce faci: Validează ziua pe server și, opțional, adaugă JavaScript pentru dezactivarea zilelor.

Întrebări frecvente4 răspunsuri
Pot limita numărul de livrări pe zi?

Da, numărând comenzile existente pe acea dată și respingând peste o capacitate. Cere implementare, depinde de regulile tale.

Funcționează cu checkout-ul cu blocuri?

Nu hook-urile clasice din fragment. Pentru blocuri ai nevoie de un plugin compatibil sau de o implementare dedicată.

Unde văd data în comandă?

Fragmentul o afișează în administrare sub adresa de livrare; o poți adăuga și în email.

Vă ocupați de implementare?

Da, cu teste pe checkout-ul tău. Cere ofertă fixă.