Hook action và filter
Danh sách hook của plugin, đọc trực tiếp từ mã nguồn phiên bản 3.5.0. Đủ để đổi phí ship, sửa dữ liệu trước khi tạo vận đơn, loại bớt dịch vụ và đổi cách tính khối lượng — mà không phải sửa file plugin.
Đặ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 sẽ mất khi cập nhật.
Action
| Hook | Tham số | Chạy khi nào |
|---|---|---|
devvn_after_ghn_create_order | $order_ID | Ngay sau khi tạo vận đơn GHN thành công. Hook chính để nối sang hệ thống khác — mã vận đơn đọc bằng get_post_meta($order_ID, '_ghn_ordercode', true). |
after_ghn_order_action_html | $order | Cuối ô GHN trong trang sửa đơn hàng. Dùng để thêm nút của riêng bạn vào đó. |
ghn_setting_menu | $current_tab | Cuối thanh tab, để thêm tab mới. |
ghn_setting_menu_<tab> | $current_tab | Nội dung của tab tự thêm. Chính addon đăng đơn tự động dùng cặp hook này. |
ghn_before_template_part · ghn_after_template_part | $template_name, $template_path, $located, $args | Trước và sau khi nạp một template của plugin. |
vn_checkout_setting_general | không có | Nội dung tab Cài đặt chung — module trang thanh toán dùng chung móc vào đây. |
Filter — phí vận chuyển và dịch vụ
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
devvn_ghn_rate | mảng id, label, cost, meta_data | Đổi phương thức vận chuyển trước khi WooCommerce nhận — kể cả số tiền ở khoá cost. Đây là hook chính để cộng phụ phí hay miễn phí ship. |
ghn_service_name | $short_name, $service_id | Đổi tên dịch vụ hiện cho khách. |
ghn_exclude_service | [] | Danh sách mã dịch vụ không hiện cho khách. Cách gọn nhất để giấu một dịch vụ bạn không muốn bán. |
ghn_available_services_args | $args, $package | Sửa dữ liệu gửi đi khi hỏi GHN có những dịch vụ nào. |
ghn_get_fee_args | $args, $package | Sửa dữ liệu gửi đi khi hỏi giá. |
devvn_title_shipping_fee_failed | 'Phí vận chuyển sẽ báo sau.' | Chữ hiện khi GHN không trả được giá. |
Filter — khối lượng và kích thước
| Hook | Tham số | Dùng để |
|---|---|---|
wc_devvn_cart_contents_weight | $weight | Đổi tổng khối lượng giỏ hàng trước khi hỏi giá. Dùng để cộng thêm khối lượng bao bì. |
wc_devvn_cart_contents_dimension | $dimension, $dimension_text, $package | Đổi kích thước gói hàng của cả giỏ. |
get_product_dimension | $dimension, $product, $qty, $dimension_text | Đổi kích thước tính cho từng sản phẩm. |
Filter — tạo vận đơn
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
ghn_pre_data_before_create_order | $data, $order | Sửa toàn bộ dữ liệu gửi lên GHN ngay trước khi tạo vận đơn. Hook mạnh nhất của plugin. |
devvn_ghn_product_args | $products, $this, $order | Đổi danh sách hàng hoá ghi trên vận đơn. |
ghn_items_create_order_args | mảng | Đổi từng dòng hàng gửi kèm vận đơn. |
devvn_notecode_default | 'KHONGCHOXEMHANG' | Ghi chú bắt buộc mặc định khi không xác định được từ cấu hình. |
ghn_shift_date_args | $args | Sửa dữ liệu khi hỏi các ca lấy hàng còn trống. |
ghn_order_detail_args | $args | Sửa dữ liệu khi hỏi chi tiết một vận đơn. |
Filter — email, tracking, giao diện
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
ghn_mail_string_filter | $string, $order | Thêm mã thay thế của riêng bạn vào email báo mã vận đơn. |
ghn_tracking_order_priority | 10 | Độ ưu tiên khi plugin chèn phần tra cứu vào trang. |
ghn_custom_field | $fields | Thêm hoặc sửa trường trong khung tạo vận đơn. |
ghn_template_path | 'devvn-ghn/' | Thư mục trong theme dùng để ghi đè template của plugin. |
ghn_get_template · ghn_locate_template | $located | Chỉ định thẳng file template cần nạp. |
enable_debug_webhook | false | Trả true để ghi nhật ký riêng cho luồng webhook. |
Ví dụ hay dùng
Cộng thêm phụ phí đóng gói vào phí ship
add_filter( 'devvn_ghn_rate', function ( $rate ) {
$rate['cost'] = $rate['cost'] + 5000;
return $rate;
} );
Miễn phí ship cho một hạng khách hàng
add_filter( 'devvn_ghn_rate', function ( $rate ) {
$user = wp_get_current_user();
if ( in_array( 'vip_customer', (array) $user->roles, true ) ) {
$rate['cost'] = 0;
}
return $rate;
} );
Giấu bớt một dịch vụ không muốn bán
add_filter( 'ghn_exclude_service', function ( $ids ) {
$ids[] = 53321;
return $ids;
} );
Cộng thêm khối lượng bao bì cho mọi đơn
add_filter( 'wc_devvn_cart_contents_weight', function ( $weight ) {
return $weight + 100; // gram
} );
Đổi ghi chú giao hàng ghi trên vận đơn
add_filter( 'ghn_pre_data_before_create_order', function ( $data, $order ) {
$data['note'] = 'Goi truoc khi giao 15 phut';
return $data;
}, 10, 2 );
Tên khoá trong $data theo đúng tài liệu API của GHN. Bật Debug ở tab Cài đặt GHN rồi tạo thử một vận đơn, đọc ghn_log.txt để xem cấu trúc thật trước khi sửa.
Ghi lại mã vận đơn sang hệ thống khác
add_action( 'devvn_after_ghn_create_order', function ( $order_id ) {
$tracking = get_post_meta( $order_id, '_ghn_ordercode', true );
if ( $tracking ) {
error_log( 'Don ' . $order_id . ' co ma van don ' . $tracking );
}
} );
Thêm mã thay thế của riêng bạn vào email
add_filter( 'ghn_mail_string_filter', function ( $string, $order ) {
return str_replace( '{hotline}', '0965 419 096', $string );
}, 10, 2 );
Hai hook devvn_ghn_rate và ghn_pre_data_before_create_order tác động thẳng lên số tiền khách trả và lên vận đơn thật. Chuyển sang môi trường Test ở tab Cài đặt GHN để thử — vận đơn tạo ở đó không tính tiền.
Còn vướng chỗ nào thì xem Giải đáp thắc mắc.