Jak zmniejszyć ilość wymaganych pól w formularzu zamówienia WooCommerce? Przykład optymalizacji

Czy prowadzisz sklep internetowy na WooCommerce i chcesz dostosować formularz zamówienia do potrzeb swojego biznesu? W tym artykule pokażę Ci, jak krok po kroku zmodyfikować checkout WooCommerce, aby był bardziej przyjazny dla klientów i zgodny z wymogami prawnymi.

1. Zgoda na dostarczenie treści cyfrowych

Jeśli sprzedajesz produkty cyfrowe (e-booki, kursy online, dostępy do platform), prawo wymaga uzyskania specjalnej zgody od klienta na dostarczenie treści przed upływem terminu na odstąpienie od umowy. Oto jak możesz to zrobić:

Co to daje Twojemu klientowi?

  • Jasną informację o warunkach zakupu produktu cyfrowego
  • Świadomość utraty prawa do odstąpienia od umowy po otrzymaniu dostępu
  • Pewność prawną dla obu stron transakcji

Jak to działa w praktyce?

  • Podczas składania zamówienia klient zobaczy checkbox z odpowiednią zgodą
  • Informacja o wyrażonej zgodzie będzie widoczna:
    • W mailu potwierdzającym zamówienie
    • Na stronie z szczegółami zamówienia
    • W panelu administracyjnym sklepu

2. Dostosowanie pól dla firm

Często klienci biznesowi mają inne potrzeby niż klienci indywidualni. Dlatego warto dostosować formularz tak, aby pokazywał odpowiednie pola w zależności od typu klienta.

Co zyskują Twoi klienci?

  • Prostszy formularz dla klientów indywidualnych
  • Dodatkowe pola (w tym NIP) dla firm
  • Możliwość łatwego przełączania między trybem “firma” a “klient indywidualny”

Jak to działa?

  • Domyślnie widoczne są tylko podstawowe pola (imię, nazwisko, email)
  • Po zaznaczeniu checkboxa “Kupuję jako firma” pojawiają się dodatkowe pola:
    • Nazwa firmy
    • NIP
    • Adres firmy
    • Kod pocztowy
    • Miasto

Gdzie pojawi się NIP?

NIP będzie automatycznie wyświetlany:

  • W panelu administracyjnym przy zamówieniu
  • W mailach z potwierdzeniem zamówienia
  • Na stronie podziękowania po złożeniu zamówienia

3. Uproszczenie procesu zamówienia

Aby ułatwić klientom składanie zamówień, wprowadziliśmy kilka usprawnień:

  • Usunięto pole “Dodatkowe informacje” – często niepotrzebne i wydłużające formularz
  • Przeniesiono informację o RODO na koniec formularza, tuż przed przyciskiem “Kupuję i płacę”
  • Wyłączono zbędną walidację kodu pocztowego, która czasem powodowała problemy

Kod dla programistów

Poniżej znajdziesz kompletny kod do implementacji powyższych funkcji. Wystarczy dodać go do pliku functions.php swojego motywu lub stworzyć dedykowany plugin.

// Dodanie checkboxa w checkoucie
add_action('woocommerce_review_order_before_submit', 'dodaj_checkbox_zgody');
add_action('woocommerce_checkout_process', 'sprawdz_checkbox_zgody');

function dodaj_checkbox_zgody() {
   wp_nonce_field('zgoda_cyfrowa_action', 'zgoda_cyfrowa_nonce');
   
   woocommerce_form_field('zgoda_cyfrowa', array(
       'type' => 'checkbox',
       'class' => array('form-row privacy'),
       'label' => 'Wyrażam zgodę na dostarczenie treści cyfrowej objętej zamówieniem przed upływem terminu na odstąpienie od umowy. Wiem, że wraz z jej dostarczeniem tracę prawo odstąpienia od umowy.',
       'required' => true,
   ));
}

function sprawdz_checkbox_zgody() {
   if (!isset($_POST['zgoda_cyfrowa']) || !wp_verify_nonce($_POST['zgoda_cyfrowa_nonce'], 'zgoda_cyfrowa_action')) {
       wc_add_notice('Proszę zaakceptować zgodę na dostarczenie treści cyfrowej.', 'error');
   }
}

// Zapisanie zgody w zamówieniu
add_action('woocommerce_checkout_update_order_meta', 'zapisz_zgode_w_zamowieniu');
function zapisz_zgode_w_zamowieniu($order_id) {
   if (isset($_POST['zgoda_cyfrowa']) && wp_verify_nonce($_POST['zgoda_cyfrowa_nonce'], 'zgoda_cyfrowa_action')) {
       update_post_meta($order_id, 'zgoda_cyfrowa', sanitize_text_field($_POST['zgoda_cyfrowa']));
   }
}

// Wyświetlenie zgody w mailach
add_action('woocommerce_email_order_details', 'dodaj_zgode_do_maila', 10, 4);
function dodaj_zgode_do_maila($order, $sent_to_admin, $plain_text, $email) {
   if ($order->get_meta('zgoda_cyfrowa')) {
       echo '<p>Wyrażono zgodę na dostarczenie treści cyfrowej przed upływem terminu odstąpienia od umowy.</p>';
   }
}

// Wyświetlenie zgody na stronie zamówienia
add_action('woocommerce_order_details_after_order_table', 'pokaz_zgode_na_stronie_zamowienia');
function pokaz_zgode_na_stronie_zamowienia($order) {
   if ($order->get_meta('zgoda_cyfrowa')) {
       echo '<p>Wyrażono zgodę na dostarczenie treści cyfrowej przed upływem terminu odstąpienia od umowy.</p>';
   }
}

// Usuń domyślną lokalizację
remove_action('woocommerce_checkout_terms_and_conditions', 'wc_checkout_privacy_policy_text', 20);

// Dodaj jako ostatni element, tuż przed przyciskiem "Kupuję i płacę"
add_action('woocommerce_review_order_before_submit', 'wc_checkout_privacy_policy_text', 99);


// Usuń "Informacje dodatkowe"
add_filter('woocommerce_enable_order_notes_field', '__return_false');

// Dostosuj pola checkout
add_filter('woocommerce_checkout_fields', 'dostosuj_pola_checkout');
function dostosuj_pola_checkout($fields) {
   $required_fields = ['billing_first_name', 'billing_last_name', 'billing_email', 'billing_country'];

   foreach ($fields['billing'] as $key => $field) {
       if (!in_array($key, $required_fields)) {
           $fields['billing'][$key]['required'] = false;
           $fields['billing'][$key]['class'][] = 'firma-pole';
           $fields['billing'][$key]['class'][] = 'hidden';
       }
   }

   $fields['billing']['billing_nip'] = array(
       'type' => 'text',
       'label' => 'NIP',
       'class' => array('firma-pole', 'hidden'),
       'required' => false,
       'priority' => 31
   );

   return $fields;
}

// Dodaj checkbox po email
add_action('woocommerce_after_checkout_billing_form', 'dodaj_checkbox_firma');
function dodaj_checkbox_firma() {
   woocommerce_form_field('firma_checkbox', array(
       'type' => 'checkbox',
       'label' => 'Zaznacz jeśli kupujesz jako przedsiębiorca lub prowadzisz działalność nierejestrowaną albo chcesz otrzymać fakturę',
       'required' => false,
       'class' => array('form-row-wide'),
       'clear' => true,
       'priority' => 115
   ));
}

// JavaScript do zarządzania wyświetlaniem mniejszej ilości pól
add_action('wp_footer', 'skrypt_pola_firmowe');
function skrypt_pola_firmowe() {
   ?>
   <script type="text/javascript">
   jQuery(document).ready(function($) {
       $('#firma_checkbox').change(function() {
           $('.firma-pole').toggleClass('hidden');
           
           if ($(this).is(':checked')) {
               $('#billing_company_field input').prop('required', true);
               $('#billing_address_1_field input').prop('required', true);
               $('#billing_postcode_field input').prop('required', true);
               $('#billing_city_field input').prop('required', true);
               $('#billing_nip_field input').prop('required', true);
           } else {
               $('.firma-pole input').prop('required', false);
               $('.firma-pole input').val('');
           }
       });
   });
   </script>
   <style>
   .hidden { display: none !important; }
   </style>
   <?php
}

// Panel admina - wyświetlanie NIP
add_action('woocommerce_admin_order_data_after_billing_address', 'wyswietl_nip_admin');
function wyswietl_nip_admin($order) {
   echo '<p><strong>NIP:</strong> ' . get_post_meta($order->get_id(), '_billing_nip', true) . '</p>';
}

// Maile - wyświetlanie NIP
add_action('woocommerce_email_after_order_table', 'wyswietl_nip_email', 10, 4);
function wyswietl_nip_email($order, $sent_to_admin, $plain_text, $email) {
   if ($nip = get_post_meta($order->get_id(), '_billing_nip', true)) {
       echo '<p><strong>NIP:</strong> ' . $nip . '</p>';
   }
}

// Strona podziękowania - wyświetlanie NIP
add_action('woocommerce_order_details_after_order_table', 'wyswietl_nip_podziekowanie');
function wyswietl_nip_podziekowanie($order) {
   if ($nip = get_post_meta($order->get_id(), '_billing_nip', true)) {
       echo '<p><strong>NIP:</strong> ' . $nip . '</p>';
   }
}
// Modyfikacja walidacji pola postcode na potrzeby uproszczenia procesu składania zamowienia
add_filter('woocommerce_checkout_fields', 'wyłącz_walidacje_postcode');
function wyłącz_walidacje_postcode($fields) {
   $fields['billing']['billing_postcode']['validate'] = array();
   return $fields;
}

Wskazówki dotyczące implementacji:

  1. Przed wprowadzeniem zmian wykonaj kopię zapasową strony
  2. Testuj zmiany na środowisku developerskim
  3. Sprawdź działanie formularza w różnych przeglądarkach
  4. Upewnij się, że wszystkie wymagane pola działają poprawnie

Podsumowanie

Wprowadzenie tych modyfikacji znacząco usprawni proces składania zamówień w Twoim sklepie. Pamiętaj, że zadowolony klient to większa szansa na ponowne zakupy!

Dodatkowe wskazówki:

  • Regularnie testuj działanie formularza
  • Zbieraj feedback od klientów
  • Dostosowuj teksty do swojej grupy docelowej
  • Monitoruj statystyki porzuconych koszyków