Khi khách hàng bấm nút Đặt hàng trên cửa hàng WooCommerce của bạn, điều cuối cùng họ mong muốn là phải chờ đợi. Tuy nhiên, không ít shop online đang gặp tình trạng trang checkout loading rất lâu, đôi khi mất 5-10 giây mới hoàn tất. Vấn đề này không mới nhưng ít anh em để ý, cũng như chưa tìm ra cách xử lý triệt để. Nếu bạn quan tâm đến trải nghiệm mua sắm mượt mà nhất cho khách hàng, bài viết này sẽ hướng dẫn bạn cách giảm độ trễ khi checkout trên WooCommerce hiệu quả.
Tham khảo thêm: Tạo thông báo Freeship cho WooCommerce.

Nguyên nhân gây độ trễ khi checkout WooCommerce
Thường thì anh em sẽ nghĩ ngay vấn đề nằm ở Hosting, tốc độ server, hay thiếu RAM. Đúng là yếu tố phần cứng có ảnh hưởng, nhưng nguyên nhân phổ biến nhất lại đến từ cách WordPress xử lý email. Khi khách hàng checkout thành công, WooCommerce mặc định sẽ gửi ngay lập tức 2 email: một email thông báo đơn hàng mới cho chủ shop, và một email xác nhận đơn hàng cho khách mua hàng.
WordPress sẽ gọi hàm wp_mail() để gửi email qua SMTP mà bạn đã thiết lập. Nếu server SMTP phản hồi chậm, một đơn hàng có thể mất 2-3 giây chỉ để chờ gửi email. Nhưng nếu có nhiều khách hàng checkout cùng lúc, ví dụ trong các đợt flash sale hay chiến dịch marketing lớn, thì hệ thống phải xếp hàng chờ gửi email lần lượt, dẫn đến độ trễ cộng dồn lên 5-10 giây thậm chí lâu hơn.
Điều này ảnh hưởng trực tiếp đến trải nghiệm khách hàng. Nhiều người sẽ bấm lại nút Đặt hàng vì tưởng hệ thống bị lỗi, dẫn đến tạo ra đơn hàng trùng lặp. Hoặc tệ hơn, khách hàng sẽ thoát trang và mua ở nơi khác.
Giải pháp: Gửi email bất đồng bộ (Async Email)
Ý tưởng cốt lõi rất đơn giản: thay vì gửi email ngay lập tức trong quá trình checkout, ta sẽ đưa email vào hàng đợi (queue) và hệ thống sẽ xử lý gửi email ở nền (background) sau khi trang checkout đã hoàn tất. Nhờ vậy, khách hàng nhận được thông báo Đặt hàng thành công ngay lập tức mà không phải chờ đợi quá trình gửi email.
Dưới đây là 2 cách để triển khai giải pháp này.
Cách 1: Thiết lập hàng đợi email trên Hosting (Plesk)
Nếu hosting của bạn sử dụng bảng điều khiển Plesk để quản lý, bạn có thể tận dụng tính năng gửi email theo lịch trình (cronjob) sẵn có. Cách này rất đơn giản, không cần cài thêm plugin nào.

Bạn truy cập vào Plesk, tìm phần Mail Settings, bật tính năng gửi email theo lịch trình (Mail Queue / Scheduled Sending). Khi tính năng này được kích hoạt, Plesk sẽ không gửi email ngay mà lưu vào hàng đợi, sau đó cronjob trên server sẽ xử lý gửi email theo chu kỳ. Cách này giúp tách biệt hoàn toàn quá trình gửi email khỏi luồng xử lý checkout.
Lưu ý: Bạn cần đảm bảo cronjob trên Plesk đang chạy đúng. Nếu hosting sử dụng cPanel thay vì Plesk, bạn có thể thiết lập cronjob thủ công trong phần Cron Jobs của cPanel để xử lý email queue định kỳ mỗi 1-5 phút.
Cách 2: Sử dụng Plugin Pending Email SMTP
Đây là cách tiện lợi nhất cho đa số người dùng WordPress. Plugin Pending Email SMTP miễn phí trên repository WordPress.org sẽ tự động chuyển đổi quá trình gửi email sang chế độ bất đồng bộ. Thay vì gọi wp_mail() trực tiếp, plugin sẽ lưu email vào database và dùng cron WordPress (WP-Cron) để gửi dần dần ở background.
Tải plugin Pending Email SMTP tại WordPress.org
Bạn chỉ cần cài đặt và bật plugin lên là mọi chuyện được giải quyết. Plugin tương thích tốt với các plugin SMTP phổ biến như WP Mail SMTP, FluentSMTP, Post SMTP.
Cách 3: Sử dụng code tự viết trong functions.php
Nếu bạn không muốn cài plugin thêm, có thể tự code một giải pháp đơn giản bằng cách dùng action hook woocommerce_order_status_pending_to_processing_notification hoặc shutdown hook để delay việc gửi email. Dưới đây là đoạn code mẫu:
// Loai bo email WooCommerce mac dinh khi checkout
add_action( 'woocommerce_order_status_pending_to_processing', 'chiasehay_delay_wc_emails', 10, 2 );
function chiasehay_delay_wc_emails( $order_id, $order ) {
// Loai bo hook gui email ngay cua WooCommerce
remove_action( 'woocommerce_order_status_pending_to_processing_notification', array( WC()->mailer(), 'send_transactional_email' ), 10 );
// Dat lai email se gui qua WP-Cron sau 30 giay
wp_schedule_single_event( time() + 30, 'chiasehay_send_delayed_email', array( $order_id ) );
}
// Hook gui email delay
add_action( 'chiasehay_send_delayed_email', 'chiasehay_process_delayed_email', 10, 1 );
function chiasehay_process_delayed_email( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order ) return;
$mailer = WC()->mailer();
$mailer->emails['WC_Email_New_Order']->trigger( $order_id );
$mailer->emails['WC_Email_Customer_Processing_Order']->trigger( $order_id );
}
Đoạn code trên sẽ hủy việc gửi email ngay lập tức của WooCommerce, rồi đặt lịch gửi lại sau 30 giây thông qua WP-Cron. Khách hàng sẽ thấy trang thank you ngay lập tức, còn email sẽ được gửi âm thầm ở background.
Các yếu tố khác gây chậm checkout cần kiểm tra
Ngoài vấn đề SMTP, bạn cũng nên kiểm tra thêm các nguyên nhân sau để tối ưu toàn diện tốc độ checkout:
1. Caching không tối ưu: Đảm bảo trang checkout KHÔNG bị cache bởi plugin cache. Trang checkout phải luôn là dynamic content. Nếu bạn dùng LiteSpeed Cache, WP Rocket, hay W3 Total Cache, hãy kiểm tra cài đặt Exclude/Bypass cho trang checkout và cart.
2. Quá nhiều plugin hoạt động: Mỗi plugin active thêm đều tạo thêm query database và HTTP request. Hãy kiểm tra lại danh sách plugin active, vô hiệu hóa những plugin không cần thiết cho quá trình checkout.
3. Theme nặng: Theme với quá nhiều JavaScript, CSS không tối ưu sẽ làm chậm toàn site. Hãy dùng Google PageSpeed Insights hoặc GTmetrix để kiểm tra và tối ưu.
4. Payment gateway chậm: Một số cổng thanh toán có API response chậm. Nếu bạn dùng nhiều cổng thanh toán, hãy kiểm tra xem cổng nào là nguyên nhân chính bằng cách test từng cái một.
5. Database quá tải: Nếu database có quá nhiều postmeta, transients, hoặc revision, quá trình query sẽ chậm. Hãy dọn dẹp database định kỳ bằng plugin như WP-Optimize hoặc Advanced Database Cleaner.
Best Practices để tối ưu tốc độ checkout
Sau khi áp dụng giải pháp gửi email bất đồng bộ, bạn nên kết hợp thêm các biện pháp sau để checkout thực sự nhanh:
– Sử dụng PHP 8.x trở lên: PHP 8 có hiệu năng tốt hơn PHP 7.x đáng kể, nhiều hosting đã hỗ trợ PHP 8.2 hoặc 8.3.
– Bật OPcache trên server: OPcache cache lại bytecode PHP giúp giảm thời gian xử lý.
– Dùng CDN để phân phối tài nguyên tĩnh (CSS, JS, ảnh) cho trang checkout.
– Giảm số lượng AJAX call trên trang checkout, đặc biệt là các plugin tính phí vận chuyển, voucher code.
– Tối ưu lại các webhook nếu bạn có kết nối WooCommerce với CRM, ERP hay hệ thống bên thứ ba.
Lưu ý về WP-Cron
Nếu bạn sử dụng plugin Pending Email SMTP hoặc code tự viết dựa vào WP-Cron, hãy lưu ý rằng WP-Cron mặc định chạy theo dạng pseudo-cron (chỉ chạy khi có lượt truy cập website). Nghĩa là nếu không có ai truy cập site trong 30 giây sau khi khách checkout, email sẽ không được gửi ngay.
Để giải quyết vấn đề này, bạn nên vô hiệu hóa WP-Cron mặc định và thiết lập hệ thống cron thực (server cron) thông qua hosting. Cách thực hiện: thêm dòng sau vào file wp-config.php
define( 'DISABLE_WP_CRON', true );
Sau đó, vào cronjob trên hosting (cPanel hoặc Plesk) và thêm lệnh sau, chạy mỗi phút:
cd /path/to/your/website && php wp-cron.php > /dev/null 2>&1
Thay /path/to/your/website bằng đường dẫn thực tế đến thư mục cài WordPress của bạn. Cách này đảm bảo WP-Cron chạy chính xác theo lịch trình bất kể có hay không có lượt truy cập.
Tổng kết
Độ trễ khi checkout WooCommerce chủ yếu đến từ quá trình gửi email đồng bộ qua SMTP. Bằng cách chuyển sang gửi email bất đồng bộ qua plugin Pending Email SMTP, cronjob hosting, hoặc code custom trong functions.php, bạn có thể giảm đáng kể thời gian chờ đợi của khách hàng. Kết hợp thêm việc tối ưu cache, giảm plugin thừa, và cấu hình WP-Cron đúng cách, trang checkout của bạn sẽ hoạt động nhanh chóng và mượt mà.
Hy vọng bài viết giúp anh em giải quyết được vấn đề checkout chậm trên WooCommerce. Nếu có câu hỏi hay cách làm nào hay hơn, đừng ngần ngại chia sẻ ở phần bình luận bên dưới nhé.
Thực ra mình chỉ là người dùng tự mày mò, toàn bộ kiến thức trong bài đến từ quá trình vọc vạch cá nhân. Nội dung này không thay thế được một website được dựng đúng nghĩa. Nếu bạn cần dựng tử tế, có thể tham khảo đội ngũ thiết kế web chuyên – mình hay giới thiệu bạn bè qua TaigaWeb.

