Trong thị trường thương mại điện tử Việt Nam năm 2026, việc tích hợp giao hàng tự động (tính phí ship realtime, tạo vận đơn, theo dõi trạng thái) là yếu tố quyết định để tăng tỷ lệ chốt đơn và giảm tỷ lệ hủy hàng. Các đơn vị vận chuyển lớn như GHN (Giao Hàng Nhanh), GHTK (Giao Hàng Tiết Kiệm), Viettel Post chiếm hơn 70% thị phần, và WooCommerce (kết hợp Flatsome hoặc theme khác) là nền tảng phổ biến nhất cho store Việt.
Tích hợp giao hàng tự động giúp:
- Tính phí ship chính xác theo tỉnh/quận/huyện/xã/phường.
- Tạo vận đơn 1-click từ dashboard WooCommerce.
- Cập nhật trạng thái giao hàng (đang lấy hàng → giao thành công → hoàn tất).
- Giảm lỗi thủ công, tăng trải nghiệm khách hàng.
Bài viết hướng dẫn 2 cách thực hiện:
- Dùng plugin (dễ nhất, phù hợp newbie/agency).
- Dùng code thuần (không plugin, nhẹ, tùy chỉnh sâu – phù hợp dev/store lớn).
Dựa trên thông tin cập nhật 2026 từ các nguồn uy tín như levantoan.com, azweb.com.vn, GitHub awethemes/vn-shipping và tài liệu chính thức GHN/GHTK/Viettel Post.
Chuẩn Bị Chung Trước Khi Tích Hợp
- Đăng ký tài khoản nhà vận chuyển: GHN.vn, GHTK.vn, viettelpost.vn → Lấy Token/API Key.
- Website dùng WooCommerce (phiên bản ≥ 9.0), kích hoạt Shipping Zones trong WooCommerce > Settings > Shipping.
- Nhập trọng lượng sản phẩm (gram) khi tạo sản phẩm – bắt buộc để tính phí ship.
- Backup site trước khi chỉnh sửa.

Giao diện WooCommerce Shipping Zones với các tỉnh Việt Nam.
Cách 1: Tích Hợp Bằng Plugin (Khuyến Nghị Cho Hầu Hết Store)
Plugin là cách nhanh nhất, hỗ trợ realtime API và tạo vận đơn.
Plugin Phổ Biến 2026 Tại Việt Nam
- Plugin GHN WooCommerce (từ levantoan.com): Miễn phí cơ bản, Pro hỗ trợ tạo vận đơn hàng loạt, tương thích GHTK/Viettel Post.
- ShipDepot for WooCommerce (WordPress.org): Miễn phí, tích hợp GHN + GHTK + Ahamove + nhiều đơn vị khác.
- VN Shipping (GitHub awethemes/vn-shipping): Miễn phí, hỗ trợ GHN, GHTK, Viettel Post (đang phát triển Viettel).
- Plugin Viettel Post WooCommerce (AZ Web hoặc levantoan.com): Tính phí + tạo vận đơn.
- Woo Vietnam Checkout (levantoan.com): Kết hợp phí ship quận/huyện + thanh toán.
Hướng Dẫn Cài Đặt & Tích Hợp (Ví dụ: Plugin GHN WooCommerce Pro)
- Tải plugin: Từ levantoan.com hoặc kho chính thức (GHN cung cấp miễn phí bản cơ bản).
- Cài đặt: Plugins > Add New > Upload Plugin > Chọn ZIP > Install > Activate.
- Cấu hình:
- WooCommerce > Settings > Shipping > Tìm “GHN” hoặc “Giao Hàng Nhanh”.
- Nhập Token API (lấy từ GHN dashboard > Cài đặt > API).
- Chọn kho hàng mặc định (địa chỉ shop).
- Bật tính phí realtime, tạo vận đơn tự động.
- Mapping tỉnh/thành (hỗ trợ địa chỉ 2 cấp mới 2025-2026).
- Test:
- Thêm sản phẩm vào giỏ → Checkout → Chọn GHN → Xem phí ship tự tính.
- Đặt đơn test → Vào Orders > Xem nút “Tạo vận đơn GHN” → Click để tạo mã vận đơn.
Tương tự cho GHTK/Viettel Post: Plugin tương ứng sẽ có tab riêng trong Shipping.
Ưu điểm: Setup 10-20 phút, hỗ trợ update API mới, giao diện thân thiện. Nhược điểm: Thêm plugin (có thể conflict nếu nhiều), bản Pro trả phí (~500k-1tr/năm).

Dashboard plugin GHN WooCommerce với nút tạo vận đơn.
Cách 2: Tích Hợp Bằng Code Thuần (Không Dùng Plugin)
Phù hợp nếu bạn muốn site nhẹ, không phụ thuộc plugin, hoặc tùy chỉnh sâu (ví dụ: phí ship custom theo logic riêng).
Nguyên Lý
- Tạo custom Shipping Method bằng class PHP kế thừa WC_Shipping_Method.
- Gọi API GHN/GHTK/Viettel Post để tính phí realtime.
- Sử dụng AJAX cho checkout động (nếu cần).
Code Mẫu: Tạo Shipping Method GHN Custom (Đơn Giản)
Dán vào functions.php của Child Theme:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
if ( ! class_exists( 'WC_GHN_Shipping' ) ) { class WC_GHN_Shipping extends WC_Shipping_Method { public function __construct( $instance_id = 0 ) { $this->id = 'ghn_shipping'; $this->instance_id = absint( $instance_id ); $this->method_title = __( 'Giao Hàng Nhanh (Custom)', 'woocommerce' ); $this->method_description = __( 'Tích hợp GHN API không plugin', 'woocommerce' ); $this->supports = array( 'shipping-zones', 'instance-settings' ); $this->init(); $this->enabled = $this->get_option( 'enabled' ); $this->title = $this->get_option( 'title', 'Giao Hàng Nhanh' ); } public function init() { $this->init_form_fields(); $this->init_settings(); add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) ); } public function init_form_fields() { $this->instance_form_fields = array( 'enabled' => array( 'title' => __( 'Enable/Disable', 'woocommerce' ), 'type' => 'checkbox', 'label' => __( 'Bật GHN Shipping', 'woocommerce' ), 'default' => 'yes' ), 'title' => array( 'title' => __( 'Tiêu đề', 'woocommerce' ), 'type' => 'text', 'description' => __( 'Tiêu đề hiển thị cho khách', 'woocommerce' ), 'default' => __( 'Giao Hàng Nhanh', 'woocommerce' ), 'desc_tip' => true ), 'api_token' => array( 'title' => __( 'Token API GHN', 'woocommerce' ), 'type' => 'text', 'description' => __( 'Lấy từ dashboard GHN', 'woocommerce' ), 'default' => '' ), ); } public function calculate_shipping( $package = array() ) { $weight = 0; foreach ( $package['contents'] as $item_id => $values ) { $weight += (int) $values['data']->get_weight() * $values['quantity']; } // Gọi API GHN tính phí (ví dụ đơn giản) $token = $this->get_option('api_token'); if ( empty($token) ) return; // Địa chỉ shop (hardcode hoặc từ setting) $from_district = 1442; // Quận 1, TP.HCM ví dụ $to_district = 1444; // Lấy từ $package['destination']['district'] nếu có mapping $response = wp_remote_post( 'https://online-gateway.ghn.vn/shiip/public-api/v2/shipping-order/fee', array( 'headers' => array( 'Token' => $token, 'ShopId' => 'YOUR_SHOP_ID', 'Content-Type' => 'application/json' ), 'body' => json_encode(array( 'from_district_id' => $from_district, 'to_district_id' => $to_district, 'service_id' => 53320, // Gói chuẩn 'weight' => $weight * 1000, // gram 'insurance_value' => 0, )), )); if ( is_wp_error( $response ) ) return; $body = json_decode( wp_remote_retrieve_body( $response ) ); if ( isset( $body->data->total ) ) { $rate = array( 'id' => $this->id, 'label' => $this->title, 'cost' => $body->data->total, 'package' => $package, ); $this->add_rate( $rate ); } } } } // Đăng ký method add_action( 'woocommerce_shipping_init', 'ghn_shipping_init' ); function ghn_shipping_init() { if ( ! class_exists( 'WC_GHN_Shipping' ) ) { require_once __DIR__ . '/class-wc-ghn-shipping.php'; // Nếu tách file } } add_filter( 'woocommerce_shipping_methods', 'add_ghn_shipping_method' ); function add_ghn_shipping_method( $methods ) { $methods['ghn_shipping'] = 'WC_GHN_Shipping'; return $methods; } |
Lưu ý:
- Code trên là mẫu cơ bản (tính phí GHN). Bạn cần mapping tỉnh/quận Việt Nam (dùng API GHN province/district).
- Để tạo vận đơn: Dùng hook woocommerce_order_status_changed gọi API GHN create order.
- Tương tự cho GHTK/Viettel: Thay endpoint API và params (xem docs chính thức).
Ưu điểm: Site nhẹ, không conflict, tùy chỉnh phí (ví dụ: free ship >500k). Nhược điểm: Phải code + debug API, update khi API nhà vận chuyển thay đổi.
Mẹo Nâng Cao (Cả 2 Cách)
- Sử dụng Woo Vietnam Checkout để hỗ trợ địa chỉ quận/huyện/xã chi tiết.
- Bật webhook từ nhà vận chuyển để tự động cập nhật trạng thái đơn hàng.
- Test với đơn giả (sandbox mode nếu GHN/Viettel hỗ trợ).
Kết Luận
- Người mới/store nhỏ → Dùng plugin (GHN Woo hoặc ShipDepot) để nhanh chóng.
- Store lớn/dev → Dùng code để kiểm soát và tối ưu chi phí.
Chỉ cần 30-60 phút setup là store của bạn đã có giao hàng tự động chuyên nghiệp như Shopee/Lazada. Nếu gặp lỗi API (đặc biệt địa chỉ mới 2025-2026), liên hệ support nhà vận chuyển hoặc Ftechx Solutions
Chúc bạn bán hàng thành công năm 2026!

