
Dưới đây là 20+ chức năng có thể thêm vào trang thanh toán (Checkout) của WordPress (WooCommerce) thông qua file functions.php
:
1. Thêm Trường Tùy Chỉnh vào Trang Thanh Toán
Thêm một trường nhập thông tin vào trang thanh toán (ví dụ: Mã số thuế, CMND, Ghi chú thêm…).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | add_action('woocommerce_after_order_notes', 'them_truong_tuy_chinh_thanh_toan'); function them_truong_tuy_chinh_thanh_toan($checkout) { echo '<div id="custom_checkout_field"><h3>Thông tin bổ sung</h3>'; woocommerce_form_field('custom_field', array( 'type' => 'text', 'class' => array('form-row-wide'), 'label' => __('Mã số thuế'), 'required' => false, ), $checkout->get_value('custom_field')); echo '</div>'; } add_action('woocommerce_checkout_update_order_meta', 'luu_truong_tuy_chinh'); function luu_truong_tuy_chinh($order_id) { if (!empty($_POST['custom_field'])) { update_post_meta($order_id, 'custom_field', sanitize_text_field($_POST['custom_field'])); } } |
2. Tự Động Điền Thông Tin Địa Chỉ từ User Meta
Nếu khách hàng đã đăng nhập, tự động điền địa chỉ mặc định.
| add_filter('woocommerce_checkout_fields', 'tu_dong_dien_dia_chi_nguoi_dung'); function tu_dong_dien_dia_chi_nguoi_dung($fields) { if (is_user_logged_in()) { $current_user = wp_get_current_user(); $fields['billing']['billing_address_1']['default'] = get_user_meta($current_user->ID, 'billing_address_1', true); } return $fields; } |
3. Ẩn Một Phương Thức Thanh Toán Nếu Sản Phẩm Cụ Thể Được Chọn
Ẩn thanh toán qua chuyển khoản nếu có sản phẩm cụ thể trong giỏ hàng.
| add_filter('woocommerce_available_payment_gateways', 'an_phuong_thuc_thanh_toan'); function an_phuong_thuc_thanh_toan($available_gateways) { if (is_admin()) return $available_gateways; foreach (WC()->cart->get_cart() as $cart_item) { if ($cart_item['product_id'] == 123) { // ID sản phẩm cần kiểm tra unset($available_gateways['bacs']); // Ẩn chuyển khoản ngân hàng } } return $available_gateways; } |
4. Tự Động Đánh Dấu Đơn Hàng là Đã Hoàn Thành Nếu Là Sản Phẩm Kỹ Thuật Số
Nếu đơn hàng chỉ có sản phẩm digital (không có phí vận chuyển), tự động đánh dấu là “Hoàn tất”.
| add_action('woocommerce_thankyou', 'tu_dong_hoan_tat_don_hang'); function tu_dong_hoan_tat_don_hang($order_id) { if (!$order_id) return; $order = wc_get_order($order_id); if ($order->has_downloadable_item() && !$order->has_shipping()) { $order->update_status('completed'); } } |
Phải lưu ý thật kỹ khi dùng chức năng này nhé, vì các bạn nếu bán file như bản vẽ, thì nên cân nhắc khi dùng.
5. Hiển Thị Thông Báo Khi Chọn Một Phương Thức Thanh Toán Cụ Thể
Hiển thị thông báo khi khách hàng chọn thanh toán bằng chuyển khoản.
| add_action('woocommerce_review_order_before_submit', 'hien_thi_thong_bao_thanh_toan'); function hien_thi_thong_bao_thanh_toan() { echo '<p style="color: red;">⚠️ Nếu bạn chọn chuyển khoản ngân hàng, đơn hàng sẽ được xử lý sau khi chúng tôi xác nhận thanh toán.</p>'; } |
6. Giới Hạn Thanh Toán Khi Tổng Giá Trị Đơn Hàng Dưới Mức Xác Định
Không cho phép thanh toán nếu tổng đơn hàng dưới 100.000 VNĐ.
| add_action('woocommerce_checkout_process', 'kiem_tra_gia_tri_don_hang'); function kiem_tra_gia_tri_don_hang() { $minimum_order_amount = 100000; if (WC()->cart->total < $minimum_order_amount) { wc_add_notice(sprintf('Đơn hàng tối thiểu là %s VNĐ. Vui lòng mua thêm sản phẩm.', number_format($minimum_order_amount)), 'error'); } } |
7. Chặn Email Thanh Toán Nếu Khách Hàng Đã Thanh Toán Trực Tiếp
Nếu đơn hàng đã được thanh toán trực tiếp, không gửi email xác nhận thanh toán.
| add_filter('woocommerce_email_recipient_customer_on_hold_order', 'chan_email_khi_da_thanh_toan', 10, 2); function chan_email_khi_da_thanh_toan($recipient, $order) { if ($order->is_paid()) { return ''; } return $recipient; } |
8. Hiển Thị Phí Thanh Toán Thêm Khi Chọn COD (Thanh Toán Khi Nhận Hàng)
Thêm phí 20.000 VNĐ khi khách hàng chọn COD.
| add_action('woocommerce_cart_calculate_fees', 'them_phi_cod'); function them_phi_cod() { if (is_admin() && !defined('DOING_AJAX')) return; if (WC()->session->get('chosen_payment_method') == 'cod') { WC()->cart->add_fee('Phí COD', 20000); } } |
9. Tùy Chỉnh Nội Dung Email Xác Nhận Đơn Hàng
Thêm thông tin khuyến mãi vào email xác nhận đơn hàng.
| add_filter('woocommerce_email_order_meta', 'tuy_chinh_email_xac_nhan', 10, 3); function tuy_chinh_email_xac_nhan($order, $sent_to_admin, $plain_text) { echo '<p>Cảm ơn bạn đã mua hàng! Nhập mã <strong>SALE10</strong> để giảm 10% cho lần mua tiếp theo.</p>'; } |
10. Tạo Mã Giảm Giá Tự Động Sau Khi Đặt Hàng Thành Công
Khi khách hàng hoàn tất đơn hàng, tự động tạo mã giảm giá 10% cho lần sau.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | add_action('woocommerce_thankyou', 'tao_ma_giam_gia_tu_dong'); function tao_ma_giam_gia_tu_dong($order_id) { if (!$order_id) return; $coupon_code = 'SALE' . $order_id; $coupon = array( 'post_title' => $coupon_code, 'post_content' => '', 'post_status' => 'publish', 'post_author' => 1, 'post_type' => 'shop_coupon' ); $new_coupon_id = wp_insert_post($coupon); update_post_meta($new_coupon_id, 'discount_type', 'percent'); update_post_meta($new_coupon_id, 'coupon_amount', 10); update_post_meta($new_coupon_id, 'individual_use', 'yes'); update_post_meta($new_coupon_id, 'usage_limit', 1); update_post_meta($new_coupon_id, 'expiry_date', date('Y-m-d', strtotime('+7 days'))); } |
11. Bắt Buộc Khách Hàng Đồng Ý Điều Khoản Trước Khi Thanh Toán
Thêm checkbox bắt buộc khách hàng đồng ý điều khoản trước khi thanh toán.
| add_action('woocommerce_review_order_before_submit', 'them_checkbox_dieu_khoan', 10); function them_checkbox_dieu_khoan() { echo '<p><input type="checkbox" id="dieu_khoan" name="dieu_khoan" required> Tôi đồng ý với <a href="#">điều khoản & điều kiện</a>.</p>'; } add_action('woocommerce_checkout_process', 'kiem_tra_dieu_khoan'); function kiem_tra_dieu_khoan() { if (!isset($_POST['dieu_khoan'])) { wc_add_notice(__('Bạn phải đồng ý với điều khoản để tiếp tục thanh toán!'), 'error'); } } |
12. Đặt Ngày Giao Hàng Tùy Chọn Khi Thanh Toán
Cho phép khách hàng chọn ngày giao hàng mong muốn.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | add_action('woocommerce_after_order_notes', 'them_truong_ngay_giao_hang'); function them_truong_ngay_giao_hang($checkout) { echo '<div id="custom_checkout_field"><h3>Chọn ngày giao hàng</h3>'; woocommerce_form_field('delivery_date', array( 'type' => 'date', 'class' => array('form-row-wide'), 'label' => __('Ngày giao hàng mong muốn'), 'required' => false, ), $checkout->get_value('delivery_date')); echo '</div>'; } add_action('woocommerce_checkout_update_order_meta', 'luu_ngay_giao_hang'); function luu_ngay_giao_hang($order_id) { if (!empty($_POST['delivery_date'])) { update_post_meta($order_id, 'delivery_date', sanitize_text_field($_POST['delivery_date'])); } } |
13. Tự Động Gán Khách Hàng Vào Một Nhóm Sau Khi Thanh Toán
Thêm khách hàng vào nhóm VIP nếu tổng đơn hàng vượt 5 triệu VNĐ.
| add_action('woocommerce_order_status_completed', 'gan_khach_hang_nhom_vip'); function gan_khach_hang_nhom_vip($order_id) { $order = wc_get_order($order_id); $user_id = $order->get_user_id(); if ($user_id) { $total_spent = wc_get_customer_total_spent($user_id); if ($total_spent >= 5000000) { wp_update_user(array('ID' => $user_id, 'role' => 'vip_customer')); } } } |
14. Hiển Thị Thông Tin Khách Hàng Đã Đăng Ký Khi Thanh Toán
Tự động hiển thị số điện thoại hoặc email đã đăng ký khi khách hàng đăng nhập.
| add_filter('woocommerce_checkout_fields', 'hien_thi_thong_tin_khach_hang'); function hien_thi_thong_tin_khach_hang($fields) { if (is_user_logged_in()) { $user = wp_get_current_user(); $fields['billing']['billing_phone']['default'] = $user->billing_phone; $fields['billing']['billing_email']['default'] = $user->user_email; } return $fields; } |
15. Ẩn Trường Địa Chỉ Khi Khách Hàng Mua Hàng Số
Nếu giỏ hàng chỉ có sản phẩm số, ẩn các trường địa chỉ.
| add_filter('woocommerce_checkout_fields', 'an_truong_dia_chi_voi_san_pham_so'); function an_truong_dia_chi_voi_san_pham_so($fields) { if (WC()->cart->needs_shipping() === false) { unset($fields['billing']['billing_address_1']); unset($fields['billing']['billing_city']); unset($fields['billing']['billing_postcode']); } return $fields; } |
16. Bắt Buộc Khách Hàng Nhập Số Điện Thoại Hợp Lệ
Đảm bảo khách hàng nhập đúng định dạng số điện thoại.
| add_action('woocommerce_checkout_process', 'kiem_tra_so_dien_thoai'); function kiem_tra_so_dien_thoai() { if (!preg_match('/^0[0-9]{9,10}$/', $_POST['billing_phone'])) { wc_add_notice(__('Vui lòng nhập số điện thoại hợp lệ!'), 'error'); } } |
17. Hiển Thị Mã Giảm Giá Đã Dùng Khi Thanh Toán
| add_action('woocommerce_review_order_before_payment', 'hien_thi_ma_giam_gia'); function hien_thi_ma_giam_gia() { if (WC()->cart->get_applied_coupons()) { echo '<p><strong>Mã giảm giá:</strong> ' . implode(', ', WC()->cart->get_applied_coupons()) . '</p>'; } } |
18. Tự Động Tạo Tài Khoản Nếu Khách Hàng Chưa Đăng Nhập
| add_action('woocommerce_checkout_order_processed', 'tu_dong_tao_tai_khoan'); function tu_dong_tao_tai_khoan($order_id) { if (!is_user_logged_in()) { $order = wc_get_order($order_id); $email = $order->get_billing_email(); if (!email_exists($email)) { $username = sanitize_user(current(explode('@', $email))); $password = wp_generate_password(); $user_id = wp_create_user($username, $password, $email); wc_set_customer_auth_cookie($user_id); update_user_meta($user_id, 'billing_phone', $order->get_billing_phone()); } } } |
19. Hiển Thị Giao Diện Thanh Toán Riêng Cho Thành Viên VIP