WooCommerce nie ma pola na NIP, bo powstał na rynku, na którym nikt go nie potrzebuje. W polskim sklepie brakuje go od pierwszego zamówienia na firmę - i wtedy zaczyna się improwizacja: klient wpisuje numer w „Uwagach do zamówienia”, ktoś przepisuje go ręcznie, myli cyfrę, faktura wraca do korekty.
Są trzy sposoby, żeby to naprawić. Różnią się nie tyle efektem, co tym, ile pracy zostawiają na później.
Sposób 1: kilka linijek kodu
Najszybszy. Jak go napisać, zależy od tego, którą kasę ma Twój sklep - a w nowych instalacjach WooCommerce domyślna jest kasa blokowa.
Kasa blokowa
Pole rejestruje się funkcją woocommerce_register_additional_checkout_field (WooCommerce 8.9 i nowszy):
add_action( 'woocommerce_init', function () {
woocommerce_register_additional_checkout_field( [
'id' => 'mojsklep/nip',
'label' => 'NIP',
'location' => 'order',
'type' => 'text',
'required' => false,
] );
} );
Zapisu i widoku w panelu nie trzeba dopisywać - WooCommerce sam zapisuje wartość przy zamówieniu i pokazuje ją w szczegółach zamówienia, w panelu i u klienta.
Kasa klasyczna
Jeśli sklep używa jeszcze skrótu , pole dokładasz filtrem woocommerce_checkout_fields. W kasie blokowej ten filtr nic nie robi: kod nie zgłasza błędu, a pola po prostu nie ma - więcej o tym we wpisie o blokowej kasie.
add_filter( 'woocommerce_checkout_fields', function ( $fields ) {
$fields['billing']['billing_nip'] = [
'label' => 'NIP',
'required' => false,
'class' => [ 'form-row-wide' ],
'priority' => 35,
];
return $fields;
} );
W klasycznej kasie wartość trzeba jeszcze samemu pokazać w panelu:
add_action( 'woocommerce_admin_order_data_after_billing_address', function ( $order ) {
echo '<p><strong>NIP:</strong> ' . esc_html( $order->get_meta( '_billing_nip' ) ) . '</p>';
} );
Wada, o której warto wiedzieć
Kod w functions.php znika razem z motywem. Przy zmianie szablonu za dwa lata pole zniknie, a razem z nim widok danych w panelu - dane zostaną w bazie, ale nikt ich nie zobaczy. Jeśli decydujesz się na tę drogę, przenieś kod do wtyczki własnej, choćby jednoplikowej.
Sposób 2: wtyczka do budowania pól
Wtyczki typu „Checkout Field Editor” pozwalają dodać pole klikaniem. Zaleta: nie dotykasz kodu. Wady dwie - takie wtyczki zwykle dokładają całą warstwę ustawień, z której użyjesz jednego procenta, a pole i tak nie ma walidacji NIP-u, więc literówka przechodzi dalej.
To dobre rozwiązanie, jeśli pól niestandardowych potrzebujesz więcej niż jedno i nie chcesz pisać kodu.

Sposób 3: pole z walidacją sumy kontrolnej
NIP ma cyfrę kontrolną, więc poprawność da się sprawdzić bez odpytywania jakiegokolwiek rejestru:
function tw_is_valid_nip( string $nip ): bool {
$nip = preg_replace( '~[^0-9]~', '', $nip );
if ( strlen( $nip ) !== 10 ) {
return false;
}
$weights = [ 6, 5, 7, 2, 3, 4, 5, 6, 7 ];
$sum = 0;
for ( $i = 0; $i < 9; $i++ ) {
$sum += (int) $nip[ $i ] * $weights[ $i ];
}
return ( $sum % 11 ) === (int) $nip[9];
}
Ta funkcja odrzuci przestawione cyfry i większość literówek. Nie sprawdzi, czy firma istnieje - do tego trzeba API GUS-u - ale wyłapie to, co w praktyce psuje faktury najczęściej.
Jak podpiąć to do kasy blokowej
Sama funkcja niczego jeszcze nie sprawdza - musi ją wywołać kasa. Pole zarejestrowane sposobem pierwszym przyjmuje własną funkcję sprawdzającą pod kluczem validate_callback. WooCommerce odmówi rejestracji pola, jeśli nie będzie to poprawne wywołanie, więc literówka w nazwie funkcji nie przejdzie po cichu:
add_action( 'woocommerce_init', function () {
woocommerce_register_additional_checkout_field( [
'id' => 'mojsklep/nip',
'label' => 'NIP',
'location' => 'order',
'type' => 'text',
'required' => false,
'validate_callback' => function ( $wartosc ) {
if ( '' === $wartosc || tw_is_valid_nip( $wartosc ) ) {
return true;
}
return new WP_Error( 'nip_bledny', 'NIP ma błędną sumę kontrolną - sprawdź cyfry.' );
},
] );
} );
Puste pole przechodzi, bo NIP podaje tylko część klientów. Gdybyś chciał go wymagać przy zakupie na firmę, samo required nie wystarczy - wymusiłoby numer także przy zakupie prywatnym. Warunek trzeba oprzeć na innym polu, na przykład na zaznaczonym „chcę fakturę na firmę”.
Który wybrać
Jeśli wystawiasz kilka faktur firmowych rocznie, wystarczy sposób pierwszy przeniesiony do własnej wtyczki. Jeśli zamówienia na firmę to znacząca część sprzedaży, walidacja zwróci się po pierwszej niepoprawionej fakturze.
Walidacja NIP-u razem z pobieraniem danych firmy z rejestru VIES działa w tym sklepie - w kasie, pod polem NIP, jest przycisk „Pobierz dane firmy”. To część naszej wtyczki do faktur, której na razie nie sprzedajemy osobno. Jeśli szukasz czegoś, co dołoży własne pola do zamówienia bez pisania kodu, zajrzyj do Własnych pól produktu.
Nowa wtyczka? Dowiesz się pierwszy.
Premiery, poradniki i promocje - raz na jakiś czas, bez zasypywania skrzynki.