Tuỳ biến các trường dữ liệu trong WooCommerce Checkout Fields – Đây là những bài sưu tầm và tập hợp để tuỳ biến trang thanh toán trong WooCommerce một cách hiệu quả hơn.
Loại bỏ các cổng thanh toán trong WooCommerce
Để loại bỏ và không muốn sử dụng mọi phương thức thanh toán, cách đơn giản là bạn sẽ thêm đoạn mã sau vào file functions.php của theme.
add_filter( ‘woocommerce_cart_needs_payment’, ‘__return_false’ );
Lúc này, Trang thanh toán giờ đây sẽ chỉ hiển thị nút “Place Order/Đặt hàng”.
Cấu trúc HTML của trang Thanh toán Checkout
<body class="woocommerce-checkout">
<div class="woocommerce">
<form class="woocommerce-checkout">
<div id="customer_details" class="col2-set">
<div class="woocommerce-billing-fields">
<p class="form-row">
<div class="woocommerce-shipping-fields">
<p class="form-row">
<div class="woocommerce-additional-fields">
<div id="order_review" class="woocommerce-checkout-review-order">
<table class="woocommerce-checkout-review-order-table">
<div id="payment">
<ul class="wc_payment_methods payment_methods methods">
<div class="form-row place-order">
Các trường dữ liệu trong Checkout Field
Bạn cần nắm được tên gọi của các trường dữ liệu để tùy biến:
- Billing
billing_first_name
billing_last_name
billing_company
billing_address_1
billing_address_2
billing_city
billing_postcode
billing_country
billing_state
billing_email
billing_phone
- Shipping
shipping_first_name
shipping_last_name
shipping_company
shipping_address_1
shipping_address_2
shipping_city
shipping_postcode
shipping_country
shipping_state
- Account
account_username
account_password
account_password-2
- Order
order_comments
Giá trị của các trường dữ liệu:
type
– type of field (text, textarea, password, select)label
– label for the input fieldplaceholder
– placeholder for the inputclass
– class for the inputrequired
– true or false, whether or not the field is requireclear
– true or false, applies a clear fix to the field/labellabel_class
– class for the label elementoptions
– for select boxes, array of options (key => value pairs)
Trong trường hợp bạn muốn sử dụng woocommerce_default_address_fields
filter. Filter này sẽ áp dụng cho cả billing và shipping:
country
first_name
last_name
company
address_1
address_2
city
state
postcode
Xóa 1 trường dữ liệu trong trang Thanh toán (Remove a checkout field)
Bạn chọn tên checkout field muốn unset (muốn ẩn, xóa). Checkout field muốn giữ thì bạn thêm dấu // phía trước hoặc xóa dòng code unset đó đi. Bạn xem code và nhớ đọc 1 lưu ý quan trọng ngay phía dưới.
/**
Remove all possible fields
**/
function wc_remove_checkout_fields( $fields ) {
// Billing fields
unset( $fields['billing']['billing_company'] );
unset( $fields['billing']['billing_email'] );
unset( $fields['billing']['billing_phone'] );
unset( $fields['billing']['billing_state'] );
unset( $fields['billing']['billing_first_name'] );
unset( $fields['billing']['billing_last_name'] );
unset( $fields['billing']['billing_address_1'] );
unset( $fields['billing']['billing_address_2'] );
unset( $fields['billing']['billing_city'] );
unset( $fields['billing']['billing_postcode'] );
// Shipping fields
unset( $fields['shipping']['shipping_company'] );
unset( $fields['shipping']['shipping_phone'] );
unset( $fields['shipping']['shipping_state'] );
unset( $fields['shipping']['shipping_first_name'] );
unset( $fields['shipping']['shipping_last_name'] );
unset( $fields['shipping']['shipping_address_1'] );
unset( $fields['shipping']['shipping_address_2'] );
unset( $fields['shipping']['shipping_city'] );
unset( $fields['shipping']['shipping_postcode'] );
// Order fields
unset( $fields['order']['order_comments'] );
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'wc_remove_checkout_fields' );
Thay đổi trường dữ liệu từ bắt buộc sang Không Bắt Buộc (Make a required field not required)
Đoạn code dưới đây sẽ minh họa cho trường dữ liệu Billing Phone
add_filter( 'woocommerce_billing_fields', 'wc_unrequire_wc_phone_field');
function wc_unrequire_wc_phone_field( $fields ) {
$fields['billing_phone']['required'] = false;
return $fields;
}
Giá trị false là không bắt buộc, nếu bạn muốn chuyển sang bắt buộc thì sửa thành true.
Thay đổi tên gọi và chú thích của trường dữ liệu (Change input field labels and placeholders)
add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields');
function custom_override_checkout_fields($fields)
{
unset($fields['billing']['billing_address_2']);
$fields['billing']['billing_company']['placeholder'] = 'Business Name';
$fields['billing']['billing_company']['label'] = 'Business Name';
$fields['billing']['billing_first_name']['placeholder'] = 'First Name';
$fields['shipping']['shipping_first_name']['placeholder'] = 'First Name';
$fields['shipping']['shipping_last_name']['placeholder'] = 'Last Name';
$fields['shipping']['shipping_company']['placeholder'] = 'Company Name';
$fields['billing']['billing_last_name']['placeholder'] = 'Last Name';
$fields['billing']['billing_email']['placeholder'] = 'Email Address ';
$fields['billing']['billing_phone']['placeholder'] = 'Phone ';
return $fields;
}
Thêm 1 trường dữ liệu trong Billing và Shipping (Adding Custom Shipping And Billing Fields)
Bạn sử dụng hook woocommerce_checkout_fields để viết filter. Phương pháp này khác với bài viết trên BusinessBloomer website.
Đoạn code minh họa phía dưới áp dụng cho trường dữ liệu shipping_phone
// Hook in
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
// Our hooked in function – $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
$fields['shipping']['shipping_phone'] = array(
'label' => __('Phone', 'woocommerce'),
'placeholder' => _x('Phone', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide'),
'clear' => true
);
return $fields;
}
/**
* Display field value on the order edit page
*/
add_action( 'woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );
function my_custom_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('Phone From Checkout Form').':</strong> ' . get_post_meta( $order->get_id(), '_shipping_phone', true ) . '</p>';
}
Thêm 1 trường dữ liệu lớn (Adding a Custom Special Field)
/* Add the field to the checkout */
add_action( 'woocommerce_after_order_notes', 'thangoi_my_custom_checkout_field' );
function thangoi_my_custom_checkout_field( $checkout ) {
echo '<div id="thangoi_my_custom_checkout_field"><h2>' . __('My Field') . '</h2>';
woocommerce_form_field( 'my_field_name', array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __('Fill in this field'),
'placeholder' => __('Enter something'),
), $checkout->get_value( 'my_field_name' ));
echo '</div>';
}
Tiếp theo, bạn cần xác thực trường khi biểu mẫu thanh toán được đăng. Đối với ví dụ này, trường là bắt buộc và không phải là tùy chọn:
/* Process the checkout */
add_action('woocommerce_checkout_process', 'thangoi_my_custom_checkout_field_process');
function thangoi_my_custom_checkout_field_process() {
// Check if set, if its not set add an error.
if ( ! $_POST['my_field_name'] )
wc_add_notice( __( 'Vui lòng nhập nội dung vào ô. Không nên để trống' ), 'error' );
}
Sửa tiêu đề Field (Label)
Để sửa tiêu đề hay còn gọi là label bạn có dùng đoạn code dưới đây
add_filter( 'woocommerce_checkout_fields' , 'thangoi_wc_checkout_field_change_label', 9999999 );
function thangoi_wc_checkout_field_change_label( $fields ) {
//Tìm và thay đổi giá trị của label như bên dưới
$fields['billing']['billing_first_name']['label'] = 'Tên khách hàng';
return $fields;
}
Thay đổi vị trí và thứ tự của các Field (Prioriry)
Bạn hoàn toàn có thể điều khiển thứ tự các trường lại theo ý muốn của mình. Trước khi làm điều đó tôi muốn cho các bạn biết thứ tự mặc định hay còn gọi là Priority mà WooCommerce qui định.
- First name – 10
- Last name – 20
- Company name – 30
- Country – 40
- Street address – 50
- Apartment, suite, unit etc. (optional) – 60
- Town / City – 70
- State – 80
- Postcode / ZIP – 90
- Phone – 100
- Email – 110
Sử dụng đoạn code sau để thay đổi thứ tự của các field
add_filter( 'woocommerce_checkout_fields' , 'thangoi_sort_checkout_fields', 9999999 );
function thangoi_sort_checkout_fields( $fields ) {
$fields['billing']['billing_email']['priority'] = 22;
$fields['billing']['billing_phone']['priority'] = 23;
return $fields;
}
Xoá hoặc ẩn một trường Field
add_filter( 'woocommerce_checkout_fields' , 'thangoi_required_checkout_fields', 9999999 );
function thangoi_required_checkout_fields( $fields ) {
$fields['billing_phone']['required'] = false; // true nếu muốn bắt buộc nhập
//Làm tương tự cho các trường khác//
return $fields;
}
Bài viết sưu tầm phục vụ cho mục đích cá nhân. Thanks!