Jak dodać pole NIP do zamówienia w WooCommerce — trzy sposoby

3 min czytania karol

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: filtr w functions.php

Najszybszy i najczęściej spotykany. Dokładasz pole filtrem woocommerce_checkout_fields:

add_filter( 'woocommerce_checkout_fields', function ( $fields ) {
    $fields['billing']['billing_nip'] = [
        'label'    => 'NIP',
        'required' => false,
        'class'    => [ 'form-row-wide' ],
        'priority' => 35,
    ];
    return $fields;
} );

Potem trzeba jeszcze zapisać wartość i pokazać ją 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.

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.

Trzecią drogę wraz z przenoszeniem danych na maile i do eksportu spakowaliśmy w gotową wtyczkę — jeśli wolisz nie utrzymywać tego samodzielnie, znajdziesz ją w naszym katalogu.

[ skrót ] Albo zrób to wtyczką
v1.0.3 Nowość

Próg darmowej dostawy

„Do darmowej dostawy brakuje 47 zł” — w koszyku, mini-koszyku i na pasku u góry.

Kilka progów Kolory z motywu Bez przeładowania
WP
6.5+
Instalacje
410
79,00 zł jednorazowo
Kup i pobierz
v1.4.2 Bestseller

Faktura i NIP w zamówieniu

Klient firmowy chce fakturę, a WooCommerce nie ma gdzie zapisać NIP-u.

Walidacja NIP Eksport CSV Bez API
WP
6.4+
Instalacje
1,240
89,00 zł jednorazowo
Kup i pobierz