Szczegółowa analiza niestandardowych pól płatności w WooCommerce: kompletny przewodnik po programowaniu.

3 minuty na przeczytanie.
2026-03-13
2026-06-04
2,486
Zarabiam prowizję, gdy robisz zakupy poprzez poniższe linki, bez żadnych dodatkowych kosztów dla Ciebie.

Przegląd systemu poli do płatności w WooCommerce

Strona dokonania płatności w WooCommerce stanowi kluczowy element procesu sprzedaży online, gdyż umożliwia gromadzenie informacji o klientach. Flexybilita i rozszerzalność tej strony w dużej mierze wynikają z zastosowanego systemu poli modułowych. Ten system organizuje wszystkie elementy, które musi wpisać użytkownik (imię, adres, dane kontaktowe itd.), w postaci strukturalnego, wielowymiarowego arrayu. Ten array nie tylko określa nazwy i typy poli, ale także kontroluje ich kolejność wyświetlania, obowiązkowość wypełnienia, zasady sprawdzania oraz stosowane klasy CSS.

Środkiem całego systemu jest… class-wc-checkout.php Pliki, a także zawarte w nich dane… WC_Checkout Klasy. Wszystkie pola są grupowane według swojego zastosowania do kilku głównych “zbiorów pola”; najczęściej używane są… billing(W polu rachunku)shipping(Filtry dotyczące dostawy) i order(Pola takie jak uwagi do zamówienia itd.) Każdy zbiór pola to sam w sobie tablica zawierająca definicje wielu pol. Zrozumienie tej struktury jest pierwszym krokiem przy realizacji jakichkolwiek działań dostosowanych, ponieważ wszystkie zmiany odnoszą się do tego ogólnego zbioru pol. Programiści nie muszą edytować bezpośrednio kluczowych plików, lecz mogą wpływać na proces za pomocą serii dobrze zaprojektowanych działań i hooków filtrów. To gwarantuje trwałość dostosowanych funkcji oraz ich kompatybilność z przyszłymi wersjami oprogramowania.

Użyj wewnętrznych „haków” (hooków) do dodawania i modyfikowania polów.

WooCommerce oferuje wydajny i łatwy w użyciu system hooków, który umożliwia programistom bezpieczne dodawanie, usuwanie, modyfikowanie oraz wyświetlanie polów podczas procesu płatności. Jest to standardowa praktyka w przypadku dostosowań aplikacji, unikająca problemów z utrzymaniem, wynikających z bezpośrednich zmian w plikach szablonów core.

Polecamy lekturę. Praktyczny przewodnik po optymalizacji wydajności stron internetowych handlowych opartych na platformie WooCommerce oraz rozwoju zaawansowanych wtyczek

Jak dodać nowe pola do formularza zamówienia?

Aby dodać nowe pole na stronie rozliczeń, na przykład pola wyboru, które umożliwi klientowi wybranie typu adresu na fakturze, należy użyć odpowiednich narzędzi lub kodów programu. Konkretnie zależy od platformy, na której jest realizowana aplikacja. Możliwe jest wykorzystanie elementów interfejsu typu pola tekstowego, pola wyboru (checkbox) lub innych elementów dostępnych w języku programowania woocommerce_checkout_fields Filtr. Ten filtr przekazuje cały array poli stosowanych przy dokonaniu płatności do funkcji programisty, co umożliwia dostęp do dowolnego zbioru poli. billingDodaj nowy wpis do tego dokumentu.

UltaHost – hostingu dla stron WordPress
Gwarancja zwrotu pieniędzy w ciągu 30 dni, nieograniczony przepustowość sieci i dostęp do bazy danych, bezpłatna ochrona przed atakami typu DDoS. Promocja: 50% przy zakupie na 3 lata.
function add_invoice_title_field( $checkout_fields ) {
    $checkout_fields['billing']['billing_invoice_type'] = array(
        'type' => 'select',
        'label' => '发票抬头',
        'required' => true,
        'options' => array(
            'personal' => '个人',
            'company' => '单位'
        ),
        'class' => array('form-row-wide'),
        'priority' => 21, // 紧跟在“公司名称”字段之后
    );
    return $checkout_fields;
}
add_filter( 'woocommerce_checkout_fields', 'add_invoice_title_field' );

W powyższym kodzie został utworzony polu wyboru typu „rozwijający” w obszarze zawierającym informacje o rachunkach. Każdy element tego pola jest definiowany jako związany array (lista elementów), w którym… type, label, required Pary kluczy–wartości decydują o zachowaniu i wyglądzie pola.priority Parametry są kluczowe, ponieważ decydują o kolejności wyświetlania tego pola w formularzu – im mniejsza liczba, tym większe jest jego położenie na liście.

Modyfikacja lub usunięcie atrybów istniejących polów

Może wystąpić potrzeba dostosowania standardowych polów według wymagań biznesowych. Na przykład w niektórych regionach pola “Numer poczty” może być ustawione jako nieobowiązkowe, a pola “Stan/prowincja” mogą być ukryte. To również można zrealizować poprzez odpowiednie operacje. woocommerce_checkout_fields Realizuje to za pomocą arrayu filtrów.

function adjust_default_fields( $fields ) {
    // 将账单邮编字段设为非必填
    $fields['billing']['billing_postcode']['required'] = false;

// 完全移除账单州/省字段
    unset( $fields['billing']['billing_state'] );

// 更改邮箱字段的占位符文本
    $fields['billing']['billing_email']['placeholder'] = '用于接收订单确认信';

return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'adjust_default_fields' );

przejść (rachunek lub inspekcję itp.) unset() Funkcja może całkowicie usunąć dane z pola. W większości przypadków to się robi poprzez zastąpienie odpowiedniego elementu w arrayu (tj. przypisania nowego wartości polu). required, label, classMożna zmienić zachowanie pola poprzez użycie odpowiednich instrukcji lub kodu.

Weryfikacja pola oraz utrzymywanie danych (data persistence)

Wyświetlenie pola na stronie klienta to tylko pierwszy krok. Aby zapewnić jakość danych, konieczne jest sprawdzenie wprowadzonych informacji przez użytkownika oraz bezpieczne zapisanie tych danych do zamówienia. Proces ten składa się z dwóch etapów: sprawdzenia w czasie rzeczywistym na stronie klienta (możliwe, ale poprawia doświadczenie użytkownika) oraz sprawdzenia po wysłaniu zamówienia na serwerze (obowiązkowe).

Polecamy lekturę. Święty tekst: Kompletny przewodnik po optymalizacji wydajności stron e-handlowych opartych na platformie WooCommerce – od konfiguracji po zarządzanie cache’em

Wdrożenie logiki sprawdzania na stronie serwerowej (backend)

Gdy użytkownik naciska na przycisk “Zamówić”, WooCommerce uruchomi procedurę sprawdzania danych potrzebnych do dokonania płatności. Programiści mogą to wykorzystać do implementacji dodatkowych funkcji lub dostosowań w swoim sklepie online. woocommerce_checkout_process Akcje hooków umożliwiają wstawienie własnych zasad sprawdzania. Jeśli sprawdzenie nie przyniesie pożądnego rezultatu, należy wywołać odpowiednią procedurę. wc_add_notice() Funkcja wyświetla użytkownikowi informację o błędzie i blokuje proces tworzenia zamówienia.

function validate_custom_fields_during_checkout() {
    // 检查自定义的“发票抬头”字段
    if ( isset( $_POST['billing_invoice_type'] ) && $_POST['billing_invoice_type'] == 'company' ) {
        // 如果选择了“单位”发票,则检查是否填写了公司名称
        if ( empty( $_POST['billing_company'] ) ) {
            wc_add_notice( '选择“单位”发票抬头时,必须填写公司名称。', 'error' );
        }
    }

// 验证一个自定义的文本字段,确保其格式
    if ( ! empty( $_POST['billing_custom_id'] ) && ! preg_match( '/^CUSTd{6}$/', $_POST['billing_custom_id'] ) ) {
        wc_add_notice( '客户编号格式错误,应为 CUST 后接6位数字。', 'error' );
    }
}
add_action( 'woocommerce_checkout_process', 'validate_custom_fields_during_checkout' );

Zapisz wartości pola do metadanych zamówienia.

Po sukcesowym zweryfikowaniu następny krok polega na bezpowrotnym zapisaniu wartości pola dostosowanego podczas tworzenia zamówienia. To jest realizowane poprzez… woocommerce_checkout_update_order_meta Akcja hook została zrealizowana. Hook ten uruchamia się po generowaniu zamówienia i przekazuje ID tego zamówienia. Powinieneś go użyć w WordPress. update_post_meta() Funkcja umożliwia przechowywanie danych z formularza jako elementów zamówienia.

function save_custom_checkout_field_data( $order_id ) {
    // 保存发票类型
    if ( ! empty( $_POST['billing_invoice_type'] ) ) {
        update_post_meta( $order_id, '_billing_invoice_type', sanitize_text_field( $_POST['billing_invoice_type'] ) );
    }

// 保存客户编号
    if ( ! empty( $_POST['billing_custom_id'] ) ) {
        update_post_meta( $order_id, '_billing_custom_id', sanitize_text_field( $_POST['billing_custom_id'] ) );
    }
}
add_action( 'woocommerce_checkout_update_order_meta', 'save_custom_checkout_field_data' );

Podczas przechowywania danych używaj nazw kluczy z prefiksem podkreslonym (np. _my_key). _billing_invoice_typeTo jest ustalenie, które zapobiega wyświetlaniu tego pola w polu metadanych “Dziedziczne pola” na stronie edycji zamówienia w tle, aby uniknąć niepotrzebnych działań ze strony administratora. Koniecznie używaj tego ustalenia. sanitize_text_field() Funkcje takie jak te są używane do przygotowania danych, aby zapobiec zagrożeniom bezpieczeństwa.

hosting.com Hosting współdzielony
Wysoka wydajność dzięki procesorom AMD EPYC, pamięci masowej NVMe SSD i LiteSpeed, wewnętrzne wsparcie ekspertów 24/7, zaawansowane środki bezpieczeństwa, w tym SSL, brute force, ochrona przed złośliwym oprogramowaniem i DDoS, oszczędność do 73%

Wyświetlać dane dostosowane na ekranie dotyczącym zamówień.

Po zapisaniu danych zwykle należy je ponownie wyświetlić w kilku miejscach, w tym: 1) w interfejsie zarządzania zamówieniami w WordPressie; 2) na stronie szczegółów zamówienia w obszarze “Moje konto” dla użytkowników; oraz 3) w wysyłanych do klientów i administratorów wiadomościach e-mail dotyczących zamówienia. Zapewnia to kompletność i transparentność informacji o transakcji.

Integracja pola dostosowanego na stronie szczegółów zamówienia w tle aplikacji

Aby administrator mógł łatwo sprawdzić informacje wprowadzone przez klienta w panelu administracyjnym, konieczne jest wyświetlenie zapisanych metadanych zamówienia na stronie edycji zamówienia. To można osiągnąć poprzez użycie odpowiednich narzędzi lub procedur programowych. woocommerce_admin_order_data_after_billing_addresswoocommerce_admin_order_data_after_shipping_address „Hooki” umożliwiają wstawienie treści za istniejące informacje.

function display_custom_order_meta_in_admin( $order ) {
    $invoice_type = get_post_meta( $order->get_id(), '_billing_invoice_type', true );
    if ( $invoice_type ) {
        $display_type = ( $invoice_type == 'company' ) ? '单位' : '个人';
        echo '<p><strong>Typ adresata faktury:</strong> '`. esc_html($display_type)`.'</p>';
    }

$custom_id = get_post_meta( $order-&gt;get_id(), '_billing_custom_id', true );
    if ( $custom_id ) {
        echo '<p><strong>Numer klienta:</strong> '`.esc_html($custom_id)`.'</p>';
    }
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_custom_order_meta_in_admin' );

Wyświetlanie danych na frontendzie i w wiadomościach e-mail.

Aby klienci także mogli widzieć informacje, które udostępniają, konieczne jest także zmiany w szablonie wyświetlania zamówień na stronie frontendowej oraz w treści e-mailów. Na stronie z szczegółami zamówienia można zastosować odpowiednie modyfikacje. woocommerce_order_details_after_order_table Hak. W przypadku e-mailów należy go użyć. woocommerce_email_order_meta_keys Filtry przekazują systemowi poczty informacje o ustawionych kluczach metadanych, dzięki czemu te metadane są automatycznie włączane do treści wiadomości.

Polecamy lekturę. Naucz się tworzyć wtyczki do WordPressa: buduj skuteczne niestandardowe moduły funkcjonalne od podstaw.

// 在前台“查看订单”页面显示
function display_custom_data_in_order_view( $order ) {
    $custom_id = get_post_meta( $order-&gt;get_id(), '_billing_custom_id', true );
    if ( $custom_id ) {
        echo '<h2>Dodatkowe informacje</h2><table class="shop_table custom-info"><tbody><tr><th>Numer klienta:</th><td>'`.esc_html($custom_id)`.'</td></tr></tbody></table>';
    }
}
add_action( 'woocommerce_order_details_after_order_table', 'display_custom_data_in_order_view' );

// 将自定义字段加入订单邮件
function add_custom_field_to_emails( $keys ) {
    $keys[] = '_billing_custom_id'; // 这个键对应的值会被加入到邮件中
    $keys[] = '_billing_invoice_type';
    return $keys;
}
add_filter( 'woocommerce_email_order_meta_keys', 'add_custom_field_to_emails' );

Podsumowanie.

Dostosowanie pola do płatności w WooCommerce to cały proces rozwoju, który obejmuje od prezentacji tego pola na interfejsie użytkownika po jego zapisanie w bazie danych. Kluczowym elementem jest zrozumienie i wykorzystanie systemu hooków dostępnych w WooCommerce. woocommerce_checkout_fields Filtry służą do definiowania i modyfikacji struktury pola; poprzez nie można… woocommerce_checkout_process Akcja wykona niezbędną logikę sprawdzania; z pomocą… woocommerce_checkout_update_order_meta Działanie to umożliwia zapisanie danych ważnych i trwałych; na koniec są wykorzystywane różne elementy interfejsu („hooki”) związane z ich wyświetlaniem. woocommerce_admin_order_data_after_billing_addresswoocommerce_email_order_meta_keysDane powinny być wyświetlone w tle, na interfejsie użytkownika oraz w wiadomościach e-mail. Dzięki stosowaniu tego modelu programiści mogą stworzyć wydajny, stabilny system obsługi płatności, który doskonale odpowiada wymaganiom biznesowym, a przy tym zapewnić łatwość konserwacji kodu oraz bezpieczeństwo jego aktualizacji.

FAQ – najczęściej zadawane pytania.

Czy do pola dostosowanego można dodać zasady sprawdzania, np. takie, które zabraniają wpisywania tylko liczbowych wartości?

Można, tak jak opisano w sekcji “Weryfikacja poli i utrzymywanie danych” w tym tekście, możesz to zrobić. woocommerce_checkout_process Można napisać logikę sprawdzania w PHP w funkcji callbacka hooka. Na przykład: is_numeric() Funkcja lub regularny wyraz preg_match() Sprawdź, czy wartość pola jest tylko liczbą. Jeśli sprawdzenie nie powiedzie się, wywołaj… wc_add_notice() Wystarczy, jeśli zostanie wyświetlony błąd.

Hosting współdzielony InterServer
Hosting współdzielony $2.50 USD miesięcznie, pierwszy miesiąc $0.1 USD kod promocyjny tryinterserver, 461 skryptów aplikacji w chmurze, instalacja jednym kliknięciem.

Jak ustawić, aby określony polu dostosowanego formatu był wyświetlany tylko w przypadku wybranego sposobu dostawy?

To wymaga połączenia logiki decyzyjnej z warunkami. Możesz sprawdzić aktualny sposób dostawy w koszyku zakupów lub w sesji użytkownika w funkcji, która dodaje lub modyfikuje dane pola. Na przykład, używając… WC()->session->get('chosen_shipping_methods') Udostępnienie ID wybranego sposobu dostawy. Jeśli nie spełnia wymagań, można użyć innego sposobu dostawy. unset() Usun tego pola z arrayu pola lub dodać do niego określony klas CSS (na przykład: `.someClass`). hiddenMoże być wykorzystane w połączeniu z JavaScriptem do dynamicznego wyświetlania/wykluczania elementów.

Zmieniłem wartości w polach, ale strona dokonania płatności nie uległa żadnym zmianom. Co może być przyczyną tego?

Najpierw upewnij się, że twój własny kod jest poprawnie wykonywany (na przykład w temacie…). functions.php Nie ma błędów gramatycznych w pliku. Następnie sprawdź logikę kodu i upewnij się, że zmieniłeś właśnie właściwe nazwy kluczy w polu tablicy (na przykład…). billing Albo shippingNastępnie usun wszystkie możliwe wycieczki (cache), w tym wycieczki obiektów, wycieczki stron i wycieczki przeglądarki. Na koniec spróbuj przejść na domyślny temat (np. Storefront) i wyłącz inne dodatki, aby wykluczyć możliwe konflikty.

Części dane z zapisanych polów dostosowanych można użyć do dalszego wyszukiwania zamówień lub analizy raportów?

Możliwe, ale może być konieczne wykonać dodatkowe kroki. Ponieważ dane są przechowywane jako metadane zamówień („Post Meta”), można je uzyskać za pomocą funkcji wyszukiwania metadanych w WordPress. Aby wyszukać zamówienia w liście zamówień w backendzie WooCommerce, może być konieczne użyć wtyczki, która obsługuje wyszukiwanie w polach dostosowanych, lub napisać własny kod, aby rozszerzyć funkcję wyszukiwania standardową. Jeśli chodzi o generowanie raportów, wtyczki do tworzenia zaawansowanych raportów często oferują możliwość włączenia metadanych zamówień do kryteriów sortowania i wyświetlania. Eksporcie danych z pola do formatu CSV zależy również od tego, czy narzędzie do eksportu obsługuje wybór określonych kolumn metadanych.