Mặc định khi khách checkout chọn "Direct Bank Transfer", WooCommerce gửi email với khối thông tin BACS từ Settings → Payments. Vấn đề: nội dung cứng nhắc, không dynamic theo order_id.
Cách dưới đây tắt block BACS mặc định và inject custom block với mã đơn hàng tự sinh.
Code cần thêm vào functions.php
// Tắt nội dung BACS mặc định
add_filter('woocommerce_bacs_accounts', '__return_false');
// Inject thông tin tuỳ biến vào email "On-hold"
add_action('woocommerce_email_before_order_table', 'email_instructions_HH', 10, 3);
function email_instructions_HH($order, $sent_to_admin, $plain_text = false) {
if (!$sent_to_admin
&& 'bacs' === $order->get_payment_method()
&& $order->has_status('on-hold')) {
bank_details_HH($order->get_id());
}
}
function bank_details_HH($order_id = '') { ?>
<h2>Thông tin chuyển khoản ngân hàng</h2>
<ul>
<li>Ngân hàng: ACB</li>
<li>Số tài khoản: 5847</li>
<li>Chủ tài khoản: Phạm Huy Hoàng</li>
<li>Nội dung: HH<?php echo $order_id ?></li>
</ul>
<?php }
Lưu ý khi triển khai
- Đặt code vào functions.php của child theme, không phải parent — để theme update không xoá mất
- Đổi thông tin ngân hàng sang TK của bạn
- Tiền tố
HHphải khớp với cấu hình bên hethongsms.com / BeePay để webhook match được
Sau khi áp dụng, mỗi email "Đơn hàng đang chờ thanh toán" sẽ chứa order_id duy nhất — webhook ngân hàng đối soát nhanh hơn, ít nhầm khách.
