Docket dla deweloperów
Na tej stronie
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
| Filtr | Argumenty | Do czego |
|---|---|---|
docket_order_nip | string $nip, WC_Order|mixed $order | NIP zamówienia zwracany przez nip_of(), w panelu, e-mailach i REST API. |
docket_block_checkout | bool $wynik | Wymusza rozpoznanie kasy blokowej. Liczony raz na żądanie. |
docket_invoice_prefill | array $out, int $uid | Podpowiedź w kasie: ['wants' => bool, 'nip' => string]. |
docket_checkout_consents | array $entries, WC_Order $order, array $data | Wpisy rejestru zapisywane przy zamówieniu. |
docket_document_content | string $tresc, WP_Post $page | Treść dokumentu, z której liczony jest skrót wersji. |
docket_consent_ip | string $ip | Adres IP zapisywany przy zgodzie. Domyślnie REMOTE_ADDR. |
docket_ask_consent | bool $pytamy | Czy pokazywać baner. Domyślnie prawda, gdy wpisano GA4 lub piksel. |
docket_external_consent | bool $zewnetrzne | Zgodę 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_css | bool $css | false wyłącza wbudowane style banera. |
docket_is_product_list | bool $lista | Czy bieżąca strona to lista produktów (zdarzenie view_item_list). |
docket_analytics_hide_price | bool $ukryta, WC_Product $produkt | Czy wysyłać pozycję do analityki bez ceny. |
docket_analytics_purchase | array $dane, WC_Order $zamowienie | Parametry zdarzenia purchase. |
docket_validation_messages | array $map | Mapa podmian komunikatów walidacji kasy (tekst angielski na polski). Tylko przy polskim języku. |
docket_feed_price | array $ceny, WC_Product $produkt | Ceny do feedu: ['price' => float, 'sale_price' => float], 0 oznacza brak. |
docket_feed_include_product | bool $dolaczyc, WC_Product $produkt | Czy produkt lub wariant ma trafić do feedu. |
docket_feed_brand | string $marka, WC_Product $produkt | Marka zastępcza, gdy produkt nie ma marki w taksonomii product_brand. |
docket_feed_gtin | string $gtin, WC_Product $produkt | GTIN pozycji (same cyfry). |
NIP ze starszego pola
Sklep przed Docket trzymał NIP pod innym kluczem. Filtr zwraca stary NIP, gdy nowy jest pusty.
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.
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'].
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
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.
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.
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.
add_filter( 'docket_external_consent', '__return_true' );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
// 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
add_filter( 'docket_validation_messages', function ( $map ) {
$map['%s is a required field.'] = 'Pole %s jest wymagane.';
return $map;
} );Akcje
| Akcja | Argumenty | Do czego |
|---|---|---|
docket_feed_item | WC_Product $produkt, ?WC_Product $rodzic | Wywoływana przed zamknięciem <item> w feedzie. To, co wypiszesz, trafia do XML. |
docket_privacy_settings_link | brak | Wywołaj do_action() w motywie, żeby wypisać przycisk „Ustawienia prywatności”. Działa, gdy baner jest aktywny. |
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 );Treść musi być poprawnym XML. Wartości z bazy wstawiaj w sekcji CDATA albo po zakodowaniu znaków specjalnych.
Klucze meta
| Klucz | Obiekt | Zawartość |
|---|---|---|
_docket_order_number | zamówienie | Nadany numer, np. 2026/00042. |
_docket_order_seq | zamówienie | Wartość licznika (liczba). |
_billing_nip (ustawienie „Klucz meta NIP”) | zamówienie, użytkownik | NIP, same cyfry. Tylko przy zaznaczonej fakturze. |
_docket_wants_invoice (ustawienie „Klucz meta „chce fakturę””) | zamówienie | yes albo no. |
_docket_consents | zamówienie, użytkownik | Tablica wpisów rejestru zgód. |
_docket_ga_purchase | zamówienie | Data wysłania zdarzenia purchase (ISO 8601). |
_wc_other/docket/faktura, _wc_other/docket/nip, _wc_other/docket/firma, _wc_other/docket/marketing | zamówienie, klient | Kopie pól dodatkowych kasy blokowej zapisywane przez WooCommerce. |
Wpis rejestru zgód ma postać:
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.
| Kolumna | Typ | Opis |
|---|---|---|
seq_key | varchar(32), klucz główny | orders_2026 przy zerowaniu co rok, orders_202603 co miesiąc, orders przy jednym liczniku. |
seq_value | bigint(20) unsigned | Ostatnia 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.
| Identyfikator | Lokalizacja | Typ | Warunki |
|---|---|---|---|
docket/faktura | contact | checkbox | niewymagane |
docket/nip | contact | text | wymagane i widoczne, gdy docket/faktura jest zaznaczone; walidacja sumy kontrolnej (błąd docket_nip_nieprawidlowy) |
docket/firma | contact | text | tylko przy ukrytym polu „Firma”; warunki jak NIP |
docket/marketing | order | checkbox | niewymagane; 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
| Metoda | Zwraca |
|---|---|
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.
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 }albonull.window.docketZgody.zapisz( { analityka, marketing } ),.wszystko(),.niezbedne()zapisują decyzję.- Zdarzenie
docket:zgodynadocumentniesie decyzję wdetail. - Atrybut
data-docket-zgody-otworzna 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