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.

Nâng cao Dành cho lập trình viên Cập nhật 06.09.2026

Đặ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

HookTham sốChạy khi nào
devvn_after_ghn_create_order$order_IDNgay 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$orderCuố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_tabCuối thanh tab, để thêm tab mới.
ghn_setting_menu_<tab>$current_tabNộ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, $argsTrước và sau khi nạp một template của plugin.
vn_checkout_setting_generalkhô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ụ

HookMặc định / tham sốDùng để
devvn_ghn_ratemả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, $packageSửa dữ liệu gửi đi khi hỏi GHN có những dịch vụ nào.
ghn_get_fee_args$args, $packageSử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

HookTham 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

HookMặc định / tham sốDùng để
ghn_pre_data_before_create_order$data, $orderSử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_argsmả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$argsSửa dữ liệu khi hỏi các ca lấy hàng còn trống.
ghn_order_detail_args$argsSửa dữ liệu khi hỏi chi tiết một vận đơn.

Filter — email, tracking, giao diện

HookMặc định / tham sốDùng để
ghn_mail_string_filter$string, $orderThêm mã thay thế của riêng bạn vào email báo mã vận đơn.
ghn_tracking_order_priority10Độ ưu tiên khi plugin chèn phần tra cứu vào trang.
ghn_custom_field$fieldsThê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$locatedChỉ định thẳng file template cần nạp.
enable_debug_webhookfalseTrả 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

PHP
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

PHP
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

PHP
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

PHP
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

PHP
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

PHP
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

PHP
add_filter( 'ghn_mail_string_filter', function ( $string, $order ) {
    return str_replace( '{hotline}', '0965 419 096', $string );
}, 10, 2 );
Thử ở môi trường Test trước

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.

Hỗ trợ Zalo