Hook action và filter
Danh sách hook của plugin, đọc trực tiếp từ mã nguồn bản 1.6.4, chia theo việc bạn muốn làm: sửa phí ship, sửa dữ liệu đơn gửi lên Nhanh.vn, chọn đơn nào được đăng tự động, nối sang hệ thống khác — mà không phải sửa file plugin.
Cần hiểu luồng Open API v3 phía sau (token, sản phẩm, đơn hàng, giới hạn gọi)? Xem bài tích hợp API Nhanh.vn.
Đặt code ở đâu
Đặt trong functions.php của child theme, hoặc tốt hơn là một plugin nhỏ riêng để đổi giao diện không mất code. Đừng sửa file trong thư mục plugin — mọi thay đổi mất khi cập nhật.
Hai filter view_nhanhvn_depot_priority và nhanhvn_option được đọc ngay lúc plugin khởi động, trước khi theme nạp — muốn chúng có tác dụng thì đặt trong một file ở wp-content/mu-plugins/.
Chỗ ghi "v2" hay "v3" trong bảng là hook chỉ chạy khi website kết nối bằng API phiên bản đó.
Action
| Hook | Tham số | Chạy khi nào |
|---|---|---|
devvn_after_nhanhvn_create_order | $order_id | Ngay sau khi đăng đơn lên Nhanh.vn thành công — cả đăng tay lẫn tự động, hàng loạt. ID đơn trên Nhanh.vn đọc bằng $order->get_meta( 'nhanhvn_orderid' ). |
nhanhvn_status_html | $order, $plugin | Cuối hộp Đăng đơn Nhanh.vn của đơn đã đăng. Dùng để thêm thông tin hay nút của riêng bạn. |
nhanhvn_webhook_orderDelete | $order_id, $payload | Sau khi đơn bị xoá trên Nhanh.vn và đơn WooCommerce đã chuyển Đã huỷ. |
nhanhvn_webhook_default | $event, $payload | Webhook có sự kiện plugin không xử lý (Thêm sản phẩm, Thêm đơn hàng…). Chỗ để tự xử lý thêm. |
update_product_form_nhanhvn | $product, $item | v2 — sau khi tab Đồng bộ thông tin sản phẩm cập nhật một sản phẩm. |
update_product_form_nhanhvn_detail | $product, $data | v2 — như trên, khi có dữ liệu chi tiết sản phẩm. |
devvn_nhanhvn_license_changed | $valid | License vừa chuyển sang hợp lệ (true) hoặc không hợp lệ (false). |
nhanhvn_before_template_part, nhanhvn_after_template_part | $template_name, $template_path, $located, $args | Trước và sau khi nạp một template của plugin. |
Filter — phí vận chuyển và kho
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
devvn_nhanhvn_rate | mảng id, label, cost, meta_data; $rate_id; $ship_fee; $package… | Sửa mọi dòng phí Nhanh.vn ở trang thanh toán — cả dòng giá thật lẫn dòng "Phí vận chuyển sẽ báo sau." (dòng này có cost bằng 0). Cộng phí, đổi tên dòng. |
devvn_title_shipping_fee_failed | 'Phí vận chuyển sẽ báo sau.' | Chữ của dòng dự phòng khi Nhanh.vn không trả được giá. |
pre_data_shipping_fee_v3 | $data | v3 — sửa dữ liệu gửi đi khi hỏi giá (khối lượng, tiền thu hộ, kho…). v2 dùng pre_data_shipping_fee. |
nhanhvn_all_depots | $depots | Danh sách kho plugin dùng (đã gộp phần bạn sửa ở tab Kho hàng). |
nhanhvn_location_version | 'v2' nếu địa chỉ 2 cấp, không thì 'v1'; $province, $district, $ward | v3 — ép kiểu địa chỉ khách gửi sang Nhanh.vn. |
nhanhvn_depot_location_version | 'v1', $hubid, $fallback_state, $depot, $has_v2 | v3 — ép kiểu địa chỉ của kho gửi (3 cấp hay 2 cấp). |
nhanhvn_toCityName, nhanhvn_toDistrictName, nhanhvn_toWardName | tên tỉnh, quận, phường | Đổi tên đơn vị hành chính gửi sang Nhanh.vn khi hai bên viết khác nhau. |
devvn_nhanh_str_replace | $str | Bảng thay tên địa danh có sẵn (Đắk Lắk → Đắc Lắc…), thêm cặp thay thế của bạn. |
Filter — dữ liệu đơn gửi lên Nhanh.vn
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
pre_data_create_order_v3 | $data | v3 — sửa toàn bộ dữ liệu đơn ngay trước khi gửi. |
pre_data_create_order | $data (kiểu v2); lần gọi từ hộp thoại có thêm $order | Dữ liệu đơn kiểu v2. Với v3, kết quả của filter này được tự chuyển sang kiểu v3 trước khi qua pre_data_create_order_v3. |
pre_data_auto_send_create_order_v3 | $data, $order | v3 — dữ liệu đơn khi đăng tự động hoặc hàng loạt. v2 dùng pre_data_auto_send_create_order. |
nhanhvn_v2_to_v3_data_map | mảng khoá v2 → v3 | Thêm khoá vào bảng chuyển dữ liệu v2 sang v3. |
nhanhvn_pre_productList_data | $productList | Danh sách sản phẩm trong đơn gửi đi. |
nhanhvn_order_package_weight | tổng khối lượng (gram), $order, $products | v3 — khối lượng kiện hàng. Sản phẩm thiếu cân nặng đã được tính bằng "Khối lượng mặc định". |
nhanhvn_order_package_data | $order_package, $order, $products | v3 — thêm kích thước kiện hàng. |
nhanhvn_order_transfer_amount | tổng đơn nếu không phải COD, không thì 0; $order, $data | v3 — số tiền khách đã chuyển khoản. |
nhanhvn_order_transfer_account_id | tài khoản ở tab Tự động đăng đơn; $order, $data | v3 — chọn tài khoản nhận tiền theo từng đơn. |
nhanhvn_order_private_description | '', $order | v3 — ghi chú nội bộ (chăm sóc khách hàng) của đơn trên Nhanh.vn. |
nhanhvn_create_order_allow_email | true, $order | Trả false để không gửi email khách lên Nhanh.vn. |
nhanhvn_v3_status_code_map | New 54, Confirming 55, Confirmed 56, CustomerConfirming 57 | v3 — mã trạng thái gửi kèm khi đăng đơn. |
pre_data_cancel_order | $data | Dữ liệu gửi đi khi bấm Huỷ đơn trên Nhanh.vn. |
Filter — đăng đơn tự động, hàng loạt và hộp thoại
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
skip_auto_create_order | false, $order_id | Trả true để bỏ qua không tự đăng một đơn. |
nhanhvn_require_nhanh_id | giá trị ô "Bắt buộc sản phẩm có ID Nhanh.vn", $order | Bật, tắt việc chặn đăng đơn thiếu ID Nhanh cho từng đơn. |
nhanhvn_auto_send_carrier | 12 (Tự vận chuyển), $order | Hãng mặc định khi đơn không có dòng phí Nhanh.vn. |
nhanhvn_auto_send_serviceid | 9999 | Dịch vụ mặc định đi kèm hãng ở trên. |
nhanhvn_auto_send_shopId | '' | Mã shop của hãng khi đăng tự động. |
nhanhvn_auto_background_process | true | Trả false để đăng tự động ngay trong lượt xử lý đơn thay vì chạy nền. |
nhanhvn_auto_bulk_actions | $bulk_actions | Thêm, bớt hành động hàng loạt của plugin trong danh sách đơn. |
nhanhvn_allowTest_default | '3' (Không cho xem hàng) | Lựa chọn "Cho xem hàng?" chọn sẵn trong hộp thoại: '1' cho xem không cho thử, '2' cho thử, '4' cho xem không lấy thu ship. |
devvn_nhanhvn_order_note | ghi chú của khách | Ghi chú điền sẵn trong hộp thoại. |
nhanhvn_after_create_order_output, nhanhvn_after_order_cancel_output | $output, $order | Kết quả trả về trình duyệt sau khi đăng hay huỷ đơn bằng tay. |
Filter — webhook và trạng thái đơn
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
devvn_nhanhvn_to_order_status_{status} | trạng thái WooCommerce chọn trong bảng | v2 — đổi trạng thái WooCommerce ứng với một trạng thái Nhanh.vn, ví dụ devvn_nhanhvn_to_order_status_Success. |
nhanhvn_all_status | mảng 17 trạng thái | v2 — danh sách trạng thái Nhanh.vn hiện trong bảng ở tab Webhook. |
nhanhvn_status_to_new_order | ['Canceled', 'Aborted', 64] | Trạng thái Nhanh.vn coi như đơn đã huỷ, cho phép đăng lại. |
nhanhvn_webhook_queue_time_limit | 20 (giây) | Thời gian tối đa mỗi lượt xử lý hàng đợi. |
nhanhvn_webhook_queue_dedupe_key | khoá gộp, $event, $data, $api_version | Quy tắc gộp các lượt webhook trùng nhau. |
Filter — đồng bộ sản phẩm và khách hàng
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
nhanhvn_sync_description_field | 'content', $product, $data | Trường của Nhanh.vn dùng làm mô tả đầy đủ. |
nhanhvn_sync_short_description_field | 'description', $product, $data | Trường của Nhanh.vn dùng làm mô tả ngắn. |
nhanhvn_sync_gallery_urls | $gallery_urls, $nhanh_data, $product | Danh sách ảnh gallery trước khi tải về. |
nhanhvn_refresh_detail_time_limit | 15 (giây) | v3 — thời gian tối đa mỗi lượt "Lấy thông tin từ API". |
nhanhvn_product_load_state_ttl | 1 ngày | v3 — thời gian nhớ vị trí "Chạy tiếp" khi tải sản phẩm. |
get_products_v3_paginator_size, get_categories_v3_paginator_size, get_customers_v3_paginator_size | 100 | v3 — số bản ghi mỗi trang khi gọi API (Nhanh.vn cho tối đa 100). |
get_categories_v3_max_pages | 100 | v3 — số trang danh mục tối đa. |
nhanhvn_get_product_per_page, nhanhvn_fetch_product_detail, nhanhvn_get_product_info_process_delay | số sản phẩm mỗi trang; có lấy chi tiết không; 5 (giây) | v2 — tab Đồng bộ thông tin sản phẩm. |
nhanhvn_pre_data_add_customer | $payload, $user_id, $order | Dữ liệu khách đẩy lên Nhanh.vn. |
nhanhvn_customer_pull_time_limit, nhanhvn_customer_pull_max_pages | 20 (giây), 200 | Giới hạn mỗi lượt kéo khách về. |
nhanhvn_customer_bulk_push_limit | 2000 | Số tài khoản tối đa của nút "Đẩy toàn bộ tài khoản WP lên Nhanh.vn". |
Filter — xem cửa hàng còn hàng và template
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
view_nhanhvn_depot_priority | 38 | Vị trí nút trên woocommerce_single_product_summary. Đặt trong mu-plugins. |
nhanhvn_check_inventory_use_modal | true | Trả false để dùng giao diện cũ (danh sách dưới nút). |
nhanhvn_check_inventory_output | $output, $data | Kết quả trả về khi khách bấm nút. |
api_nhanhvn_check_inventory_output | $output, $data | Kết quả của REST nhanhvn/v1/check-inventory. |
nhanhvn_template_path | 'devvn-nhanhvn/' | Thư mục trong theme chứa template ghi đè. |
nhanhvn_get_template, nhanhvn_locate_template | đường dẫn template, tên template… | Đổi file template được nạp. |
Filter — kết nối API, giới hạn gọi và gỡ lỗi
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
nhanhvn_rate_limit_enabled | true | Bật, tắt bộ giãn nhịp gọi API. |
nhanhvn_rate_limit_max | 120 (80% của 150) | Số lần gọi tối đa mỗi cửa sổ cho từng API. Không vượt được 150. |
nhanhvn_rate_limit_window | 30 (giây) | Độ dài cửa sổ đếm. |
nhanhvn_rate_limit_min_interval | 0.25 (giây) | Khoảng cách tối thiểu giữa hai lần gọi cùng API (chỉ áp cho tác vụ nền và trang quản trị, không áp cho khách). |
nhanhvn_rate_limit_max_wait | số giây chờ tối đa, $context | Thời gian chờ tối đa khi chạm giới hạn: khách 3, quản trị 15, tác vụ nền 30, WP-CLI 60 giây. |
nhanhvn_rate_limit_log | true, $message, $level | Ghi nhật ký giới hạn gọi vào WooCommerce → Trạng thái → Nhật ký (nguồn devvn-nhanhvn-rate-limit). |
nhanhvn_api_max_network_retry | 2, $url | Số lần gọi lại khi lỗi mạng hoặc lỗi máy chủ. |
nhanhvn_api_retry_backoff | [1, 3] (giây), $url | Thời gian chờ giữa các lần gọi lại. |
nhanhvn_api_connect_timeout | 8 (giây) | Thời gian chờ bắt tay kết nối. |
nhanhvn_debug | false | Bật ghi log chi tiết. Đọc cảnh báo bên dưới trước khi dùng. |
nhanhvn_option | mảng khai báo option | Khai báo, giá trị mặc định của các ô cài đặt. Đặt trong mu-plugins. |
Ví dụ hay dùng
Cộng phí đóng gói vào phí ship Nhanh.vn
add_filter( 'devvn_nhanhvn_rate', function ( $rate ) {
if ( $rate['cost'] > 0 ) {
$rate['cost'] += 5000;
}
return $rate;
} );
Điều kiện cost > 0 để không cộng vào dòng "Phí vận chuyển sẽ báo sau.".
Đổi chữ "Phí vận chuyển sẽ báo sau."
add_filter( 'devvn_title_shipping_fee_failed', function () {
return 'Shop sẽ gọi báo phí ship khi xác nhận đơn';
} );
Không tự đăng đơn chuyển khoản chưa thanh toán
add_filter( 'skip_auto_create_order', function ( $skip, $order_id ) {
$order = wc_get_order( $order_id );
if ( $order && 'bacs' === $order->get_payment_method() && ! $order->is_paid() ) {
return true;
}
return $skip;
}, 10, 2 );
Ghi ID đơn Nhanh.vn vào ghi chú đơn sau khi đăng
add_action( 'devvn_after_nhanhvn_create_order', function ( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
$order->add_order_note( 'Đã đăng lên Nhanh.vn, ID đơn: ' . $order->get_meta( 'nhanhvn_orderid' ) );
} );
Cộng khối lượng bao bì vào kiện hàng (API v3)
add_filter( 'nhanhvn_order_package_weight', function ( $weight, $order, $products ) {
return $weight + 200; // gram
}, 10, 3 );
Ghi chú nội bộ cho đơn trên Nhanh.vn (API v3)
add_filter( 'nhanhvn_order_private_description', function ( $note, $order ) {
return 'Đơn website #' . $order->get_order_number();
}, 10, 2 );
Không chép thông tin đăng đơn Nhanh.vn khi tách đơn
Filter devvn_split_order_exclude_meta thuộc module trang thanh toán dùng chung (tính năng tách đơn). Thêm các khoá của plugin Nhanh.vn để đơn mới tách ra không mang theo ID đơn Nhanh.vn của đơn gốc:
add_filter( 'devvn_split_order_exclude_meta', function ( $keys ) {
return array_merge( $keys, array(
'nhanhvn_create_order_data',
'nhanhvn_create_order_respon',
'nhanhvn_orderid',
'nhanhvn_webhook_data',
'nhanhvn_order_cancel',
'nhanhvn_auto_status',
'nhanhvn_auto_info',
) );
} );
Bật log gỡ lỗi tạm thời
add_filter( 'nhanhvn_debug', '__return_true' );
Bật nhanhvn_debug thì plugin ghi vào file log-<App ID>.txt ngay trong thư mục plugin — ai biết đường dẫn cũng mở được. File chứa access token, verify token, tên, số điện thoại, địa chỉ khách. Chỉ bật trong lúc dò lỗi, gỡ dòng code ngay khi xong và xoá file log. Cần gửi log cho hỗ trợ thì chỉ chép đúng đoạn liên quan và che token, thông tin khách — đừng gửi nguyên file.
devvn_nhanhvn_rate tác động thẳng lên số tiền khách trả, còn các filter pre_data_create_order… tác động lên đơn thật trên Nhanh.vn — Nhanh.vn không có môi trường thử riêng. Thử trên bản sao website, đăng đơn thử với Tự vận chuyển rồi huỷ ngay.
Còn vướng chỗ nào thì xem Giải đáp thắc mắc.