Nắm vững trường tùy chỉnh thanh toán WooCommerce: Hướng dẫn đầy đủ từ tạo đến xác thực

Đọc trong 3 phút
2026-03-18
2026-06-03
2,051
Tôi kiếm được hoa hồng khi bạn mua sắm thông qua các liên kết dưới đây, mà không phát sinh thêm chi phí nào cho bạn.

Tại sao cần phải tự định các trường thanh toán?

Quy trình thanh toán tiêu chuẩn của WooCommerce thu thập những thông tin cơ bản và phổ biến mặc định, như tên, địa chỉ, số điện thoại và email. Tuy nhiên, khi doanh nghiệp của bạn có những yêu cầu đặc biệt, những thông tin này sẽ không còn đủ. Bằng cách thêm các trường tùy chỉnh, bạn có thể mang đến cho khách hàng trải nghiệm mua sắm tốt hơn và chính xác hơn.

Ví dụ, cửa hàng bán bánh kem theo yêu cầu có thể cần khách hàng cung cấp lời chúc dành cho chiếc bánh, hoặc thông tin về việc có cần đặt nến hay không; các doanh nghiệp B2B có thể cần ghi lại mã số thuế hoặc số đơn hàng của khách hàng; trong khi các cửa hàng bán vé sự kiện có thể cần thu thập thông tin chứng minh thư của người tham gia để xác minh danh tính. Các trường dữ liệu tùy chỉnh cho phép bạn thu thập những dữ liệu quan trọng ngoài các quy trình tiêu chuẩn, và những dữ liệu này có thể được sử dụng cho việc xử lý đơn hàng, phân nhóm khách hàng, tiếp thị cá nhân hóa, hoặc tuân thủ các quy định pháp lý.

Từ góc độ kỹ thuật, trang thanh toán của WooCommerce là một biểu mẫu được tạo thành từ một loạt các trường tiêu chuẩn, và cấu trúc của nó được xác định bởi các hook hành động (Action Hook) và hook lọc (Filter Hook). Điều này có nghĩa là chúng ta có thể sử dụng các hook này thông qua các plugin hoặc tệp hàm của giao diện (theme) để “thêm vào”, “xóa đi” hoặc “sửa đổi” các trường trong quá trình thanh toán. Việc hiểu rõ cơ chế cốt lõi này là nền tảng cho mọi thao tác tùy chỉnh.

Đọc thêm Hướng dẫn toàn diện phát triển website thương mại điện tử WooCommerce: Từ thiết lập đến triển khai tính năng nâng cao

Ba cách để tạo các trường thanh toán tùy chỉnh

WooCommerce cung cấp nhiều phương thức linh hoạt để thêm các trường tùy chỉnh (custom fields). Bạn có thể chọn phương pháp phù hợp nhất dựa trên trình độ kỹ thuật và nhu cầu của mình.

UltaHost – Nhà cung cấp dịch vụ máy chủ WordPress chuyên nghiệp
Bảo đảm hoàn tiền trong 30 ngày, băng thông và cơ sở dữ liệu không giới hạn, bảo vệ DDoS miễn phí, mua 3 năm ưu đãi 50%

Sử dụng các plugin để thực hiện việc thêm nội dung một cách nhanh chóng mà không cần viết mã.

Đối với các quản trị viên trang web không quen với lập trình hoặc những dự án cần được triển khai nhanh chóng, việc sử dụng các plugin chuyên dụng là cách thức thuận tiện nhất. Trên thị trường có nhiều plugin tuyệt vời như “Checkout Field Editor for WooCommerce” hoặc “WooCommerce Checkout Manager”.

Những plugin này thường cung cấp một giao diện quản trị trực quan, cho phép bạn thêm các trường mới bằng cách nhấp và chọn. Bạn có thể định nghĩa loại trường (như ô văn bản, menu thả xuống, ô chọn, nút chọn), tiêu đề trường, giá trị mặc định, xác định xem trường đó có bắt buộc hay không, cũng như vị trí của trường trên trang thanh toán (ở phần hóa đơn hay phần thông tin giao hàng). Việc sử dụng các plugin không yêu cầu bạn phải viết bất kỳ đoạn mã nào, giúp giảm đáng kể độ khó về mặt kỹ thuật và phù hợp với hầu hết các nhu cầu thông thường. Tuy nhiên, cần lưu ý rằng các plugin có thể làm tăng tải lên trang web, và trong trường hợp logic tùy chỉnh quá phức tạp, chúng có thể không đủ linh hoạt.

Thêm trường tùy chỉnh thông qua mã nguồn

Đây là phương pháp mạnh mẽ và linh hoạt nhất; bạn có thể thực hiện điều đó bằng cách chỉnh sửa các chủ đề (themes) được sử dụng trong hệ thống. functions.php Bạn có thể sử dụng tệp tin hiện có hoặc tạo một tiện ích mở rộng (plugin) tùy chỉnh để thực hiện điều đó. Trọng tâm là việc áp dụng các công cụ và kỹ thuật phù hợp. woocommerce_checkout_fields Filter hook.

Hook này cho phép bạn thay đổi mảng các trường dùng để thanh toán. Ví dụ, nếu bạn muốn thêm một trường để nhập tên công ty trong phần “Thông tin hóa đơn”, bạn có thể viết đoạn mã như sau:

Đọc thêm Cách thêm trường tùy chỉnh và siêu dữ liệu cho trang sản phẩm WooCommerce

add_filter( 'woocommerce_checkout_fields', 'custom_add_checkout_field' );
function custom_add_checkout_field( $fields ) {
    $fields['billing']['billing_company_custom'] = array(
        'label'       => __('公司名称(自定义)', 'woocommerce'),
        'placeholder' => _x('请输入您的完整公司名', 'placeholder', 'woocommerce'),
        'required'    => true,
        'class'       => array('form-row-wide'),
        'clear'       => true,
        'priority'    => 25, // 控制显示顺序,数字越小越靠前
    );
    return $fields;
}

Đoạn mã này thêm một ô văn bản bắt buộc vào trường liên quan đến hóa đơn. Điểm quan trọng nằm ở tên khóa trong mảng các trường (chẳng hạn như…) billing_company_custom…) và tập hợp các trường (field set) mà nó thuộc về.['billing']['shipping']['order'])。

Sử dụng chức năng logic điều kiện của WooCommerce

Đôi khi bạn muốn một trường chỉ được hiển thị trong những điều kiện nhất định. Ví dụ, trường “Lời nhắn trên thiệp quà” chỉ được hiển thị khi khách hàng chọn dịch vụ “Gói quà”. Điều này có thể được thực hiện bằng cách kết hợp JavaScript hoặc sử dụng các plugin hỗ trợ logic điều kiện.

Việc triển khai hoàn toàn bằng mã nguồn thường cần sự hỗ trợ của các công cụ, thư viện hoặc kỹ thuật nhất định. woocommerce_after_checkout_billing_formwoocommerce_after_checkout_shipping_form Các công cụ như “hook” được sử dụng để xuất dữ liệu dưới dạng cấu trúc HTML của các trường, đồng thời viết các script jQuery để theo dõi những thay đổi ở các trường khác (chẳng hạn như các ô chọn – checkboxes), từ đó điều khiển việc hiển thị hoặc ẩn trường mục tiêu. Tuy nhiên, phương pháp này đòi hỏi người dùng phải có kiến thức nhất định về JavaScript. Một cách đơn giản hơn là sử dụng các plugin quản lý trường chuyên nghiệp, những công cụ cung cấp các tùy chọn logic điều kiện được trình bày dưới dạng giao diện trực quan.

Hosting.com - lưu trữ chia sẻ
Hiệu năng cao, được trang bị CPU AMD EPYC, lưu trữ SSD NVMe và LiteSpeed, hỗ trợ chuyên gia nội bộ 24 giờ/ngày, các biện pháp bảo mật tiên tiến bao gồm SSL, chống brute force, phần mềm độc hại và bảo vệ DDoS, tiết kiệm tới 73%.

Xác thực và lưu dữ liệu của các trường tùy chỉnh.

Chỉ đơn giản hiển thị các trường dữ liệu trên trang web là chưa đủ; việc đảm bảo tính hợp lệ của dữ liệu và lưu trữ chúng một cách an toàn trong cơ sở dữ liệu là những bước cực kỳ quan trọng.

Xác thực dữ liệu giữa frontend và backend

Để ngăn chặn việc gửi dữ liệu không hợp lệ hoặc có tính xấu, việc xác thực phải được thực hiện ở phía máy chủ (phía sau). Điều này được thực hiện thông qua… woocommerce_checkout_process Được thực hiện bằng cách sử dụng các hook hành động (action hooks).

Tiếp theo ví dụ trên, nếu chúng ta thêm… billing_company_custom Đây là trường bắt buộc; chúng tôi cần đảm bảo rằng khách hàng không để trống nó.

Đọc thêm WooCommerce Phát triển Thực hành: Xây dựng trang web thương mại điện tử chuyên nghiệp từ con số không

add_action('woocommerce_checkout_process', 'custom_validate_checkout_field');
function custom_validate_checkout_field() {
    if ( isset($_POST['billing_company_custom']) && empty($_POST['billing_company_custom']) ) {
        wc_add_notice( __( '请填写“公司名称(自定义)”。', 'woocommerce' ), 'error' );
    }
}

wc_add_notice() Hàm sẽ hiển thị một thông báo lỗi ở phía trên trang thanh toán, ngăn chặn việc gửi đơn hàng cho đến khi người dùng sửa chữa lỗi đó. Bạn có thể triển khai các logic xác thực phức tạp hơn bên trong hàm này, chẳng hạn như kiểm tra định dạng email, phạm vi số hoặc sự phù hợp với các biểu thức chính quy (regular expressions).

Lưu dữ liệu từ các trường vào đơn hàng.

Sau khi quá trình xác thực được hoàn tất, chúng ta cần lưu giữ giá trị của các trường tùy chỉnh vào metadata của đơn hàng (Order Meta) để có thể truy cập chúng sau này, cả trong phần quản trị nền tảng lẫn trong các email được gửi đi. Điều này đòi hỏi sử dụng các công cụ hoặc chức năng phù hợp trong hệ thống qu woocommerce_checkout_update_order_meta action hook.

Máy chủ chia sẻ của InterServer
Lưu trữ chia sẻ với mức phí $2,50 USD mỗi tháng, giảm giá $0,1 USD trong tháng đầu tiên, mã giảm giá tryinterserver, với 461 ứng dụng đám mây và cài đặt chỉ bằng một cú nhấp chuột.
add_action('woocommerce_checkout_update_order_meta', 'custom_save_checkout_field');
function custom_save_checkout_field( $order_id ) {
    if ( ! empty($_POST['billing_company_custom']) ) {
        update_post_meta( $order_id, '_billing_company_custom', sanitize_text_field($_POST['billing_company_custom']) );
    }
}

update_post_meta() Hàm sẽ lưu các giá trị trường đã được làm sạch dưới dạng cặp khóa-giá trị. wp_postmeta Trong bảng, tên khóa thường bắt đầu bằng dấu gạch chân (ví dụ: _billing_company_customĐiều này giúp cho nó có thể được coi là “dữ liệu meta ẩn” (hidden metadata) trong một số giao diện nền (backend interfaces).

Hiển thị dữ liệu từ các trường dữ liệu ở cả phía trước (frontend) và phía sau (backend).

Sau khi dữ liệu được lưu trữ, bạn cần đảm bảo rằng nó có thể được xem và quản lý tại nhiều vị trí quan trọng khác nhau.

Hiển thị trong chi tiết đơn hàng và email.

Để cả chủ cửa hàng và khách hàng đều có thể xem được thông tin đã được lưu trữ, chúng ta cần hiển thị thông tin đó trên trang chi tiết đơn hàng trong hệ thống quản trị, đồng thời gửi thông tin đó qua email đơn hàng cho khách hàng và quản trị viên.

Để chỉnh sửa thông tin đơn hàng trong giao diện quản trị, bạn có thể sử dụng các chức năng được cung cấp bởi hệ thống. woocommerce_admin_order_data_after_billing_address Hook:

add_action('woocommerce_admin_order_data_after_billing_address', 'custom_display_field_in_admin', 10, 1);
function custom_display_field_in_admin($order){
    $company_custom = get_post_meta( $order->get_id(), '_billing_company_custom', true );
    if ( $company_custom ) {
        echo '<p><strong>'.__('自定义公司名').':</strong> '.$company_custom.'</p>';
    }
}

Tương tự như vậy, hãy sử dụng… woocommerce_email_order_meta_fields Bộ lọc có thể thêm trường này vào nội dung email đơn hàng.

Hiển thị trong phần xem đơn hàng của “Tài khoản của tôi”

Khi khách hàng xem chi tiết các đơn hàng cũ trên trang tài khoản của họ, họ cũng nên có thể nhìn thấy thông tin mà họ đã điền vào lúc đó. Điều này được thực hiện thông qua… woocommerce_order_details_after_order_table Thực hiện hook hành động (Action Hook):

add_action('woocommerce_order_details_after_order_table', 'custom_display_field_in_order_view', 10, 1);
function custom_display_field_in_order_view( $order ) {
    $company_custom = get_post_meta( $order-&gt;get_id(), '_billing_company_custom', true );
    if ( $company_custom ) {
        echo '<h2>'.__('额外信息').'</h2>';
        echo '<table class="woocommerce-table shop_table extra_info"><tbody>';
        echo '<tr><th>'.__('自定义公司名').':</th><td>'.$company_custom.'</td></tr>';
        echo '</tbody></table>';
    }
}

Tóm lại

Việc thêm các trường tùy chỉnh vào quy trình thanh toán của WooCommerce là một quá trình bao gồm nhiều bước, từ phân tích yêu cầu, phát triển và triển khai cho đến quản lý dữ liệu. Yếu tố then chốt nằm ở việc hiểu rõ và sử dụng hệ thống hook của WooCommerce một cách hiệu quả. woocommerce_checkout_fields Thêm trường vào bộ lọc, và sử dụng chúng. woocommerce_checkout_process Hành động đã được xác thực và được chấp thuận. woocommerce_checkout_update_order_meta Dữ liệu được lưu trữ sau khi thực hiện các thao tác cần thiết, và sau đó được trình bày trên nền tảng backend, qua email, cũng như trên giao diện người dùng thông qua nhiều công cụ hiển thị khác nhau. Đối với người mới bắt đầu, họ có thể bắt đầu với các plugin đáng tin cậy; còn đối với các nhà phát triển muốn tối ưu hóa mức độ tùy chỉnh và hiệu năng hệ thống, việc viết mã nguồn là phương pháp tốt nhất. Dù theo cách nào, việc thiết kế dòng dữ liệu một cách rõ ràng và thực hiện các bước kiểm tra chặt chẽ là yếu tố then chốt để đảm bảo tính ổn định của hệ thống và

FAQ 常见问题

Tại sao các trường tùy chỉnh mà tôi đã thêm không hiển thị trên trang thanh toán?

Vui lòng làm theo các bước sau để kiểm tra: Trước hết, hãy đảm bảo rằng đoạn mã của bạn đã được thêm vào chủ đề (theme) một cách chính xác. functions.php Trong tệp tin hoặc plugin tùy chỉnh, không có lỗi ngữ pháp. Tiếp theo, hãy kiểm tra xem các khóa trong mảng trường (field array) có được đặt vào đúng vị trí (được nhúng chính xác) hay không. $fields['billing']$fields['shipping']$fields['order'] 之中。然后,查看浏览器控制台是否有 JavaScript 错误,这可能与字段的 class 或优先级设置冲突。最后,清空网站和浏览器的缓存后再次尝试。

Làm thế nào để thiết lập các trường tùy chỉnh là tùy chọn (không bắt buộc) hoặc bắt buộc?

Khi thêm trường thông qua mã lệnh, bạn có thể thiết lập các thông số cần thiết cho trường đó trong mảng các trường (field array). 'required' => true'required' => falseNếu một trường đã được yêu cầu phải điền (bắt buộc), nhưng bạn muốn thay đổi nó thành trường tùy chọn, chỉ cần thực hiện theo các bước tương ứng. woocommerce_checkout_fields Trong hàm lọc, trường đó được xử lý (được sử dụng hoặc được loại bỏ tùy theo yêu cầu). required Chỉ cần thay đổi giá trị của tham số thành `false` là được. Lưu ý rằng sau khi thực hiện thay đổi này, bạn cũng cần điều chỉnh hoặc xóa các phần liên quan một cách phù hợp. woocommerce_checkout_process Logic of validation within it.

Dữ liệu của các trường tùy chỉnh được lưu trữ ở đâu trong cơ sở dữ liệu?

Các giá trị của trường tùy chỉnh chủ yếu được lưu trữ trong WordPress. wp_postmeta Trong bảng cơ sở dữ liệu (tiền tố của bảng có thể khác nhau), mỗi bản ghi được xác định thông qua… post_id(Tương ứng với ID đơn hàng) và wp_posts Các bản ghi đơn hàng trong bảng được liên kết với nhau thông qua… meta_key(Đó chính là tên phím mà bạn đã sử dụng khi lưu file, ví dụ như…) _billing_company_customĐược đánh dấu bằng…)meta_value Vậy là giá trị thực tế của trường được lưu trữ. Bạn có thể truy cập vào giá trị này thông qua công cụ quản lý cơ sở dữ liệu hoặc trực tiếp trong WordPress. get_post_meta() Hàm được sử dụng để truy vấn dữ liệu này.

Có thể hiển thị các trường tùy chỉnh khác nhau tùy theo sản phẩm không?

Được, nhưng điều này đòi hỏi một lô-gic phức tạp hơn. Một phương pháp phổ biến là: trước tiên, hãy thêm một danh mục tùy chỉnh hoặc trường metadata cho sản phẩm để đánh dấu loại của nó. Sau đó, trên trang thanh toán, hãy sử dụng thông tin này để xử lý quá trình mua hàng. woocommerce_after_checkout_form Hãy sử dụng các “hook” hoặc phương thức tương tự để hiển thị HTML của tất cả các trường tùy chỉnh có thể có, nhưng mặc định hãy ẩn chúng bằng CSS. Tiếp theo, hãy viết một script JavaScript để theo dõi những thay đổi trong nội dung giỏ hàng hoặc việc chọn lựa các sản phẩm cụ thể, và dựa trên loại sản phẩm hiện có trong giỏ hàng mà hiển thị hoặc ẩn các nhóm trường tương ứng một cách động. Cuối cùng, khi xác thực và lưu dữ liệu ở phía máy chủ, cũng cần xử lý dữ liệu của các trường đó một cách có điều kiện, tùy thuộc vào loại sản phẩm.