Jako konsument spotykam się czasami z sytuacją, gdy podczas zakupów w sklepie internetowym muszę podać pełne dane adresowe, nawet jeśli zamawiam produkt cyfrowy. Bywa to irytujące dla klientów, a co bardziej ostrożni mogą zrezygnować z zakupów w takim sklepie.
Ponieważ specjalizuję się w WordPressie, pokażę Ci, jak zmodyfikować formularz WooCommerce, aby nie zbierał danych adresowych i nie denerwował Twoich klientów.
Zmiany najlepiej wnieść w motywie potomnym. O tym, jak go utworzyć, pisałam w jednym z wcześniejszych wpisów. Jeśli jednak czujesz, że utworzenie motywu potomnego Cię przerasta, skorzystaj z darmowej wtyczki Code Snippets.
W pliku functions.php w motywie potomnym umieść następujący kod:
add_filter( 'woocommerce_cart_needs_shipping', 'wc_no_shipping' ); function wc_no_shipping( $x ) { return false; } add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); function custom_override_checkout_fields( $fields ) { $fields['order']['order_comments']['placeholder'] = 'Uwagi do zamówienia.'; return $fields; }
Funkcja wc_no_shipping
usunie checkbox „Wysłać na inny adres?”, natomiast funkcja custom_override_checkout_fields
zmieni tekst w okienku „Uwagi do zamówienia (opcjonalne)” z „Uwagi do zamówienia, np. informacje o dostarczeniu przesyłki.” na „Uwagi do zamówienia.” (bo przecież nie dostarczasz przesyłki, więc po co mącić klientowi w głowie?).
Już jest nieźle, prawda?
Kolejna rzecz, którą można zrobić, aby klient nie musiał wypełniać zbyt wielu okienek, to oznaczenie pól adresowych jako pola opcjonalne:
add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' ); function custom_override_default_address_fields( $address_fields ) { $address_fields['address_1']['required'] = false; $address_fields['address_2']['required'] = false; $address_fields['city']['required'] = false; $address_fields['country']['required'] = false; $address_fields['postcode']['required'] = false; return $address_fields; }
A może by tak całkowice zrezygnować z pola z krajem? Jest na to prosty sposób:
add_filter( 'woocommerce_checkout_fields' , 'custom_unset_checkout_fields' ); function custom_unset_checkout_fields( $fields ) { unset($fields['billing']['billing_country']); return $fields; }
Co gdy w koszyku mamy mieszane produkty?
Jeśli w koszyku znajdują się zarówno wirtualne, jak i fizyczne produkty, klient powinien podać adres wysyłki. Poniższy kod sprawdzi koszyk i zastosuje uproszczony formularz tylko dla koszyka z wirtualnymi produktami:
function cart_has_only_virtual_products() { if ( WC() && WC()->cart && WC()->cart->get_cart() ) { foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $product = $cart_item['data']; if ( ! $product->is_virtual() && ! $product->is_downloadable() ) { return false; } } return true; } return false; } add_filter( 'woocommerce_cart_needs_shipping', 'custom_wc_no_shipping' ); add_filter( 'woocommerce_cart_needs_shipping_address', 'custom_wc_no_shipping' ); function custom_wc_no_shipping( $needs_shipping ) { if ( cart_has_only_virtual_products() ) { return false; } return $needs_shipping; } add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); function custom_override_checkout_fields( $fields ) { if ( cart_has_only_virtual_products() ) { $fields['order']['order_comments']['placeholder'] = 'Uwagi do zamówienia.'; } return $fields; } add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields' ); function custom_override_default_address_fields( $address_fields ) { if ( cart_has_only_virtual_products() ) { $address_fields['address_1']['required'] = false; $address_fields['address_2']['required'] = false; $address_fields['city']['required'] = false; $address_fields['country']['required'] = false; $address_fields['postcode']['required'] = false; } return $address_fields; } add_filter( 'woocommerce_checkout_fields' , 'custom_unset_checkout_fields' ); function custom_unset_checkout_fields( $fields ) { if ( cart_has_only_virtual_products() ) { unset($fields['billing']['billing_country']); } return $fields; }
Więcej o możliwościach dostosowania formularza zamówienia WooCommerce do własnych upodobań znajdziecie na stronie WooCommerce.
Bardzo mi pomogłaś tym wpisem. Ogromne dzięki! 🙂
Proszę bardzo! Dzięki za komentarz! 🙂
A jak zrobić aby uproszczony formularz był tylko dla plików wirtualnych? a dla fizycznych pozostawał niezmieniony?
Cześć Rafał! W takim przypadku trzeba sprawdzić koszyk i zastosować kod tylko dla koszyka z wirtualnymi produktami. Uzupełniłam wpis o sekcję „Co gdy w koszyku mamy mieszane produkty?”. Mam nadzieję, że będzie to pomocne.