Piotr Dejneka
Dokumentacja wtyczki

Docket dla deweloperów

  • Dotyczy wersji 0.5.1
  • Zaktualizowano 6.10.2026
  • 11 min czytania
Na tej stronie
    W skrócie

    Docket ma 17 filtrów i 2 akcje, zapisuje dane w metadanych zamówień i użytkowników pod stałymi albo konfigurowalnymi kluczami i udostępnia kilka metod statycznych. Wszystkie odczyty i zapisy zamówień idą przez obiekt WC_Order, więc kod działa z HPOS i z zapisem zamówień jako wpisów.

    Filtry

    FiltrArgumentyDo czego
    docket_order_nipstring $nip, WC_Order|mixed $orderNIP zamówienia zwracany przez nip_of(), w panelu, e-mailach i REST API.
    docket_block_checkoutbool $wynikWymusza rozpoznanie kasy blokowej. Liczony raz na żądanie.
    docket_invoice_prefillarray $out, int $uidPodpowiedź w kasie: ['wants' => bool, 'nip' => string].
    docket_checkout_consentsarray $entries, WC_Order $order, array $dataWpisy rejestru zapisywane przy zamówieniu.
    docket_document_contentstring $tresc, WP_Post $pageTreść dokumentu, z której liczony jest skrót wersji.
    docket_consent_ipstring $ipAdres IP zapisywany przy zgodzie. Domyślnie REMOTE_ADDR.
    docket_ask_consentbool $pytamyCzy pokazywać baner. Domyślnie prawda, gdy wpisano GA4 lub piksel.
    docket_external_consentbool $zewnetrzneZgodę zbiera motyw albo inna wtyczka. Docket nie pokazuje banera ani nie ładuje znaczników, wysyła tylko zdarzenia e-commerce. Od 0.5.1.
    docket_banner_cssbool $cssfalse wyłącza wbudowane style banera.
    docket_is_product_listbool $listaCzy bieżąca strona to lista produktów (zdarzenie view_item_list).
    docket_analytics_hide_pricebool $ukryta, WC_Product $produktCzy wysyłać pozycję do analityki bez ceny.
    docket_analytics_purchasearray $dane, WC_Order $zamowienieParametry zdarzenia purchase.
    docket_validation_messagesarray $mapMapa podmian komunikatów walidacji kasy (tekst angielski na polski). Tylko przy polskim języku.
    docket_feed_pricearray $ceny, WC_Product $produktCeny do feedu: ['price' => float, 'sale_price' => float], 0 oznacza brak.
    docket_feed_include_productbool $dolaczyc, WC_Product $produktCzy produkt lub wariant ma trafić do feedu.
    docket_feed_brandstring $marka, WC_Product $produktMarka zastępcza, gdy produkt nie ma marki w taksonomii product_brand.
    docket_feed_gtinstring $gtin, WC_Product $produktGTIN pozycji (same cyfry).

    NIP ze starszego pola

    Sklep przed Docket trzymał NIP pod innym kluczem. Filtr zwraca stary NIP, gdy nowy jest pusty.

    PHP
    add_filter( 'docket_order_nip', function ( $nip, $order ) {
    	if ( '' === $nip && $order instanceof WC_Order ) {
    		$nip = preg_replace( '/\D+/', '', (string) $order->get_meta( '_stary_nip' ) );
    	}
    	return $nip;
    }, 10, 2 );

    Wymuszenie kasy blokowej

    Przydaje się w sklepie bez strony kasy, który korzysta wyłącznie ze Store API.

    PHP
    add_filter( 'docket_block_checkout', '__return_true' );

    Własna zgoda w rejestrze

    W kasie klasycznej $data to dane formularza. W kasie blokowej to tablica ['docket_marketing' => bool, 'docket_source' => 'store-api'].

    PHP
    add_filter( 'docket_checkout_consents', function ( $entries, $order, $data ) {
    	$entries[] = \Docket\Consents\Registry::entry(
    		'sms',
    		! empty( $data['moja_zgoda_sms'] ),
    		'Chcę dostawać SMS o statusie zamówienia'
    	);
    	return $entries;
    }, 10, 3 );

    Skrót wersji dla innego kreatora stron

    PHP
    add_filter( 'docket_document_content', function ( $tresc, $page ) {
    	if ( '' === trim( $tresc ) ) {
    		$tresc = (string) get_post_meta( $page->ID, '_moj_kreator_dane', true );
    	}
    	return $tresc;
    }, 10, 2 );

    Adres IP za Cloudflare

    Używaj nagłówka tylko wtedy, gdy serwer przyjmuje ruch wyłącznie przez tego pośrednika. Inaczej nagłówek może podać każdy.

    PHP
    add_filter( 'docket_consent_ip', function ( $ip ) {
    	$cf = $_SERVER['HTTP_CF_CONNECTING_IP'] ?? '';
    	return filter_var( $cf, FILTER_VALIDATE_IP ) ? $cf : $ip;
    } );

    Baner dla zewnętrznego narzędzia

    Baner pokaże się bez identyfikatorów GA4 i piksela. Narzędzie włączasz po zdarzeniu docket:zgody.

    PHP
    add_filter( 'docket_ask_consent', '__return_true' );

    Zgody z banera motywu

    Gdy masz już własny baner i gtag, Docket może tylko wysyłać zdarzenia e-commerce. Strona musi wtedy podać stan zgody przez window.docketZgody.stan() i ogłaszać zdarzenie docket:zgody po każdej decyzji.

    PHP
    add_filter( 'docket_external_consent', '__return_true' );
    JS
    window.docketZgody = {
    	stan: function () {
    		// null = brak decyzji; zdarzenia czekają w pamięci strony.
    		return mojBaner.decyzja() ? { analityka: mojBaner.statystyki(), marketing: mojBaner.reklamy() } : null;
    	}
    };
    mojBaner.poZapisie( function ( z ) {
    	document.dispatchEvent( new CustomEvent( 'docket:zgody', { detail: { analityka: z.statystyki, marketing: z.reklamy } } ) );
    } );

    Feed: cena, wykluczenia, GTIN

    PHP
    // Bez produktów z kategorii „outlet”.
    add_filter( 'docket_feed_include_product', function ( $dolaczyc, $produkt ) {
    	$id = $produkt->get_parent_id() ? $produkt->get_parent_id() : $produkt->get_id();
    	return $dolaczyc && ! has_term( 'outlet', 'product_cat', $id );
    }, 10, 2 );
    
    // EAN z własnego pola, gdy pole WooCommerce jest puste.
    add_filter( 'docket_feed_gtin', function ( $gtin, $produkt ) {
    	return '' !== $gtin ? $gtin : preg_replace( '/\D+/', '', (string) $produkt->get_meta( '_ean' ) );
    }, 10, 2 );
    
    // Bez cen promocyjnych w Merchant Center.
    add_filter( 'docket_feed_price', function ( $ceny, $produkt ) {
    	$ceny['sale_price'] = 0;
    	return $ceny;
    }, 10, 2 );

    Komunikaty walidacji

    PHP
    add_filter( 'docket_validation_messages', function ( $map ) {
    	$map['%s is a required field.'] = 'Pole %s jest wymagane.';
    	return $map;
    } );

    Akcje

    AkcjaArgumentyDo czego
    docket_feed_itemWC_Product $produkt, ?WC_Product $rodzicWywoływana przed zamknięciem <item> w feedzie. To, co wypiszesz, trafia do XML.
    docket_privacy_settings_linkbrakWywołaj do_action() w motywie, żeby wypisać przycisk „Ustawienia prywatności”. Działa, gdy baner jest aktywny.
    PHP
    add_action( 'docket_feed_item', function ( $produkt, $rodzic ) {
    	$kategoria = (string) $produkt->get_meta( '_google_category' );
    	if ( '' !== $kategoria ) {
    		printf( "<g:google_product_category><![CDATA[%s]]></g:google_product_category>\n", esc_html( $kategoria ) );
    	}
    }, 10, 2 );
    Docket nie czyści wyjścia tej akcji

    Treść musi być poprawnym XML. Wartości z bazy wstawiaj w sekcji CDATA albo po zakodowaniu znaków specjalnych.

    Klucze meta

    KluczObiektZawartość
    _docket_order_numberzamówienieNadany numer, np. 2026/00042.
    _docket_order_seqzamówienieWartość licznika (liczba).
    _billing_nip (ustawienie „Klucz meta NIP”)zamówienie, użytkownikNIP, same cyfry. Tylko przy zaznaczonej fakturze.
    _docket_wants_invoice (ustawienie „Klucz meta „chce fakturę””)zamówienieyes albo no.
    _docket_consentszamówienie, użytkownikTablica wpisów rejestru zgód.
    _docket_ga_purchasezamówienieData wysłania zdarzenia purchase (ISO 8601).
    _wc_other/docket/faktura, _wc_other/docket/nip, _wc_other/docket/firma, _wc_other/docket/marketingzamówienie, klientKopie pól dodatkowych kasy blokowej zapisywane przez WooCommerce.

    Wpis rejestru zgód ma postać:

    PHP
    array(
    	'key'      => 'terms',               // terms, privacy, marketing albo własny
    	'accepted' => true,
    	'label'    => 'Akceptacja regulaminu',
    	'at'       => '2026-10-01T09:15:00+00:00',
    	'ip'       => '203.0.113.7',
    	'document' => array(
    		'id'       => 12,
    		'title'    => 'Regulamin',
    		'modified' => '2026-09-30 18:02:11', // post_modified_gmt
    		'hash'     => 'a3f9c21e0b7d4e55',    // 16 znaków SHA-256 treści
    	),
    )

    Tabela licznika

    Licznik numeracji leży w tabeli {prefiks}docket_sequence, tworzonej przy aktywacji i po aktualizacji wtyczki. Wersję schematu trzyma opcja docket_seq_table_version.

    KolumnaTypOpis
    seq_keyvarchar(32), klucz głównyorders_2026 przy zerowaniu co rok, orders_202603 co miesiąc, orders przy jednym liczniku.
    seq_valuebigint(20) unsignedOstatnia nadana wartość.

    Kolejna wartość powstaje jednym zapytaniem INSERT … ON DUPLICATE KEY UPDATE z LAST_INSERT_ID(), a GREATEST() pilnuje numeru początkowego. Zwiększenie i odczyt to jedna operacja w bazie, związana z połączeniem. Numer nadawany jest na akcji woocommerce_new_order z priorytetem 5.

    Pola dodatkowe kasy blokowej

    Pola rejestrowane są na woocommerce_init przez woocommerce_register_additional_checkout_field(), tylko gdy WooCommerce ma wersję 9.9 lub nowszą i kasa jest blokowa.

    IdentyfikatorLokalizacjaTypWarunki
    docket/fakturacontactcheckboxniewymagane
    docket/nipcontacttextwymagane i widoczne, gdy docket/faktura jest zaznaczone; walidacja sumy kontrolnej (błąd docket_nip_nieprawidlowy)
    docket/firmacontacttexttylko przy ukrytym polu „Firma”; warunki jak NIP
    docket/marketingordercheckboxniewymagane; tylko przy włączonej zgodzie marketingowej

    Warunki zapisane są jako reguły JSON Schema w opcjach required i hidden. Kopię wartości pod klucze z ustawień robi akcja woocommerce_set_additional_field_value, także przy edycji zamówienia w panelu. Brak nazwy firmy przy fakturze zatrzymuje złożenie zamówienia wyjątkiem RouteException z kodem docket_brak_firmy.

    REST API

    Docket dopisuje pola do odpowiedzi zamówienia w REST API WooCommerce:

    • docket_nip, docket_wants_invoice, docket_order_number: przy włączonym module danych do faktury;
    • docket_consents: przy włączonym module zgód.

    Metody publiczne

    MetodaZwraca
    Docket\Checkout\InvoiceFields::nip_of( $order )NIP zamówienia (same cyfry), po filtrze docket_order_nip.
    Docket\Checkout\InvoiceFields::nip_meta(), ::wants_meta()Klucze meta z ustawień.
    Docket\Checkout\InvoiceFields::prefill_for( int $uid )Podpowiedź ['wants', 'nip'] dla klienta.
    Docket\Support\Nip::normalize(), ::is_valid(), ::format()Same cyfry, wynik walidacji, zapis 123-456-78-90.
    Docket\Consents\Registry::entry( $key, $accepted, $label, $page_id = 0 )Nowy wpis zgody.
    Docket\Consents\Registry::attach( 'order'|'user', $obiekt, $wpisy )Dopisuje wpisy. Dla zamówienia zapisz je potem przez $order->save().
    Docket\Consents\Registry::of_order( $order )Wpisy zgód zamówienia.
    Docket\Consents\Registry::document_version( int $page_id )Wersja dokumentu: id, tytuł, data, skrót.
    Docket\Consents\Klauzula::render( 'zakup'|'konto'|'kontakt' )HTML informacji o danych.
    Docket\Consents\Analityka::czy_pytamy()Czy baner jest aktywny.
    Docket\Orders\Numbering::preview()Numer następnego zamówienia, bez zwiększania licznika.
    Docket\Feed\Google::adres()Adres feedu z tokenem.
    Docket\Support\BlockCheckout::aktywna()Czy sklep korzysta z kasy blokowej.
    Docket\Settings::get( $klucz, $domyslna ), ::enabled( $modul )Wartość ustawienia bez przedrostka docket_; stan modułu (numbering, invoice, consents, a11y, feed).

    Opcje

    Ustawienia leżą w tabeli opcji z przedrostkiem docket_. Włączniki modułów: docket_numbering_enabled, docket_invoice_enabled, docket_consents_enabled, docket_a11y_enabled, docket_feed_enabled (wartości yes albo no). Pozostałe: docket_number_format, docket_number_padding, docket_number_reset, docket_number_start, docket_invoice_label, docket_invoice_nip_meta, docket_invoice_wants_meta, docket_marketing_consent, docket_marketing_label, docket_register_terms, docket_klauzula_enabled, docket_administrator, docket_klauzula_zakup, docket_klauzula_konto, docket_klauzula_kontakt, docket_ga4_id, docket_pixel_id, docket_gsc_token, docket_zgody_tryb, docket_zgody_odnosnik, docket_baner_tytul, docket_baner_opis, docket_feed_brand, docket_feed_token, docket_license_key.

    Feed włączaj w panelu

    Zapis ustawień w panelu odświeża reguły adresów po włączeniu feedu i generuje token. Zmiana docket_feed_enabled poleceniem wp option update tego nie robi.

    JavaScript na stronie

    • window.docketZgody.stan() zwraca { analityka, marketing } albo null.
    • window.docketZgody.zapisz( { analityka, marketing } ), .wszystko(), .niezbedne() zapisują decyzję.
    • Zdarzenie docket:zgody na document niesie decyzję w detail.
    • Atrybut data-docket-zgody-otworz na dowolnym elemencie otwiera baner.

    Stałe

    DOCKET_VERSION, DOCKET_FILE i DOCKET_PATH definiuje wtyczka. DOCKET_LICENSE_API możesz zdefiniować w wp-config.php, żeby wskazać inny serwer licencji, na przykład testowy.

    Czy ta strona pomogła?

    Ostatnia zmiana: 6.10.2026, wersja 0.5.1Zgłoś błąd w tej stronie