WooCommerce · Checkout
WooCommerce: salvarea câmpurilor personalizate în comandă
Ai nevoie de un câmp în plus (CUI, observații, tip livrare) care să ajungă în comandă. Metoda depinde de tipul de checkout; iată ambele.
- Checkout clasic: hook-uri
- Checkout cu blocuri: API oficial
- Validare
- Afișare în administrare
- Compatibil HPOS
Răspuns în aceeași zi lucrătoare Ofertă fixă Fără parole
Răspuns rapid
La checkout-ul clasic: afișezi câmpul cu woocommerce_after_order_notes și woocommerce_form_field(), îl validezi în woocommerce_checkout_process, îl salvezi cu woocommerce_checkout_update_order_meta ($order->update_meta_data + save_meta_data) și îl afișezi în administrare cu woocommerce_admin_order_data_after_billing_address. La checkout cu blocuri folosești woocommerce_register_additional_checkout_field() (id în forma namespace/nume, label, location: contact, address sau order); valorile se salvează în comandă, iar citirea recomandată e prin helper-ul CheckoutFields.
Ce ai nevoie
- Câmpurile dorite și regulile lor
- Acces la tema copil sau la un plugin propriu
- Știi tipul de checkout
- Un mediu de test
Pașii, pe rând
- 1Alege metoda după tipul de checkoutHook-urile clasice se aplică checkout-ului shortcode. Pentru checkout cu blocuri, documentația WooCommerce indică API-ul „additional checkout fields”.
- 2Clasic: afișează câmpulCu woocommerce_after_order_notes și woocommerce_form_field() afișezi câmpul la checkout. Pune codul în functions.php al temei copil.
- 3Clasic: valideazăÎn woocommerce_checkout_process verifici valoarea și, dacă e invalidă, apelezi wc_add_notice() de tip „error”.
- 4Clasic: salveazăÎn woocommerce_checkout_update_order_meta folosești $order->update_meta_data() cu sanitize_text_field() și apoi save_meta_data().
- 5Clasic: afișează în administrareCu woocommerce_admin_order_data_after_billing_address afișezi valoarea cu $order->get_meta(), ca echipa să o vadă în comandă.
- 6Blocuri: înregistrează câmpulCu woocommerce_register_additional_checkout_field(), pe hook-ul woocommerce_init sau mai târziu, cu id (namespace/nume), label, location (contact, address sau order); tipurile suportate sunt text, select, checkbox și date.
- 7Blocuri: citește valoarea corectValorile se salvează cu prefixe interne (de exemplu _wc_other/ pentru câmpurile de contact și comandă); documentația recomandă citirea prin metodele helper-ului CheckoutFields, nu prin chei directe.
- 8Testează ambele fluxuriComandă cu câmpul completat, gol, invalid; verifică comanda în administrare și emailul. La blocuri, verifică și comportamentul pentru clienți guest și autentificați.
Câmp personalizat, checkout clasic (schelet)
phpadd_action('woocommerce_after_order_notes', function ($checkout) {
woocommerce_form_field('wl_referinta', [
'type' => 'text',
'label' => 'Referință intern (opțional)',
], $checkout->get_value('wl_referinta'));
});
add_action('woocommerce_checkout_process', function () {
if (!empty($_POST['wl_referinta']) && strlen($_POST['wl_referinta']) > 40) {
wc_add_notice('Referința poate avea cel mult 40 de caractere.', 'error');
}
});
add_action('woocommerce_checkout_update_order_meta', function ($order_id) {
if (!empty($_POST['wl_referinta'])) {
$order = wc_get_order($order_id);
$order->update_meta_data('_wl_referinta', sanitize_text_field(wp_unslash($_POST['wl_referinta'])));
$order->save_meta_data();
}
});
add_action('woocommerce_admin_order_data_after_billing_address', function ($order) {
$v = $order->get_meta('_wl_referinta');
if ($v) {
echo '<p><strong>Referință:</strong> ' . esc_html($v) . '</p>';
}
});Fragmentele de cod sunt scheleturi: le adaptezi la magazinul tău și le testezi întâi pe un mediu de test (staging). Modelul urmează pașii din documentația oficială WooCommerce (afișare, validare, salvare, afișare în administrare).
Câmp personalizat, checkout cu blocuri (schelet)
phpadd_action('woocommerce_init', function () {
if (!function_exists('woocommerce_register_additional_checkout_field')) {
return;
}
woocommerce_register_additional_checkout_field([
'id' => 'wl/referinta',
'label' => 'Referință intern (opțional)',
'location' => 'order', // contact, address sau order
'type' => 'text',
'required' => false,
]);
});Fragmentele de cod sunt scheleturi: le adaptezi la magazinul tău și le testezi întâi pe un mediu de test (staging). Id-ul are forma namespace/nume. Valorile se citesc recomandat prin helper-ul CheckoutFields, nu direct din chei meta.
Mai multe detalii
Cauze frecvente și greșeli de evitatDacă pașii de mai sus nu au rezolvat problema
Câmpul nu apare în checkout-ul cu blocuri
De ce: Ai folosit hook-urile clasice.
Ce faci: Folosește woocommerce_register_additional_checkout_field() pentru checkout cu blocuri.
Valoarea nu se salvează
De ce: Numele câmpului diferă între afișare, validare și salvare, sau lipsește save_meta_data().
Ce faci: Folosește același nume peste tot și salvează cu API-ul de comenzi.
Un plugin de câmpuri suprascrie codul
De ce: Extensia Checkout Field Editor suprascrie codul din functions.php.
Ce faci: Folosește fie extensia, fie codul, nu ambele.
Întrebări frecvente4 răspunsuri
Ce tipuri de câmpuri suportă API-ul pentru blocuri?
Documentația indică text, select, checkbox și date, în locațiile contact, address și order.
Valorile sunt compatibile cu HPOS?
Da, dacă folosești API-ul de comenzi ($order->update_meta_data, save_meta_data) sau helper-ul CheckoutFields, nu acces direct la tabelul de postări.
Unde văd valoarea în administrare?
Cu woocommerce_admin_order_data_after_billing_address afișezi valoarea în ecranul comenzii.
Vă ocupați de implementare?
Da, pentru ambele tipuri de checkout. Cere ofertă fixă.
Subiecte acoperite pe această pagină
- câmpuri personalizate checkout WooCommerce
- salvare câmp în comandă WooCommerce
- Additional Checkout Fields
- woocommerce_checkout_update_order_meta
- câmp personalizat checkout blocuri
Ghiduri apropiate
- WooCommerce: finalizarea comenzii fără crearea unui cont
- WooCommerce: eliminarea câmpurilor inutile din checkout
- WooCommerce: validarea numărului de telefon la checkout
- WooCommerce: adrese de facturare și livrare diferite
- WooCommerce: butonul de plasare a comenzii nu răspunde
- WooCommerce: metodele de transport nu apar la checkout
- WooCommerce: câmpuri pentru persoane juridice
- WooCommerce: eliminarea câmpurilor inutile din checkout
- Toate ghidurile
Surse și verificare
- Personalizarea câmpurilor de checkout (documentația pentru dezvoltatori)
- Additional Checkout Fields, pentru checkout cu blocuri
Verificat pe 5 noiembrie 2026. Denumirile din setări și pașii pot diferi între versiuni.
