Hook action và filter

Nói thẳng: plugin SuperShip chỉ có hai filter riêng, đọc từ mã nguồn phiên bản 1.0.5. Phần lớn thứ bạn muốn tuỳ biến nằm ở module trang thanh toán dùng chung, và bộ hook của nó đầy đủ hơn nhiều.

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, và phần lớn mã nguồn đã được mã hoá nên cũng không sửa được.

Hook riêng của SuperShip

HookMặc địnhDùng để
dssw_title_shipping_fee_failed'Shipping fee will be notified later.'Đổi dòng chữ hiện khi SuperShip không trả được giá. Nên đổi sang tiếng Việt.
dssw_notify_later_ratemảng phương thứcSửa nguyên phương thức "báo phí sau" mà plugin đưa cho WooCommerce khi không tính được cước — kể cả ẩn nó đi.

Ngoài ra plugin phát action vn_checkout_setting_general để dựng tab Cài đặt chung — đây là hook của module dùng chung, không phải của riêng SuperShip.

Hook của module trang thanh toán

Tab Cài đặt chung của SuperShip là module dùng chung của mọi plugin vận chuyển DevVN, nên nó mang theo cả bộ hook riêng: trường checkout, cách tải dữ liệu địa chỉ, định dạng giá, tính cân nặng giỏ hàng, sổ địa chỉ, tách đơn. Danh sách đầy đủ nằm ở bài hook của plugin GHTK, mục Filter — trang thanh toán và địa chỉ — dùng được y hệt khi website chạy SuperShip.

Ví dụ hay dùng

Đổi câu báo phí sang tiếng Việt

PHP
add_filter( 'dssw_title_shipping_fee_failed', function ( $text ) {
    return 'Phí vận chuyển sẽ báo sau khi xác nhận đơn.';
} );

Không hiện phương thức nào khi SuperShip không tính được cước

Mặc định plugin vẫn đưa ra một phương thức "báo phí sau". Muốn giấu hẳn để khách không đặt được đơn không rõ phí:

PHP
add_filter( 'dssw_notify_later_rate', '__return_empty_array' );

Cộng thêm phụ phí đóng gói vào phí ship

SuperShip không có filter riêng cho số tiền, nên dùng hook chuẩn của WooCommerce:

PHP
add_filter( 'woocommerce_package_rates', function ( $rates, $package ) {
    foreach ( $rates as $rate ) {
        if ( 'devvn_supership' === $rate->get_method_id() ) {
            $rate->set_cost( $rate->get_cost() + 5000 );
        }
    }
    return $rates;
}, 20, 2 );

Miễn phí ship cho một hạng khách hàng

PHP
add_filter( 'woocommerce_package_rates', function ( $rates, $package ) {
    $user = wp_get_current_user();
    if ( ! in_array( 'vip_customer', (array) $user->roles, true ) ) {
        return $rates;
    }
    foreach ( $rates as $rate ) {
        if ( 'devvn_supership' === $rate->get_method_id() ) {
            $rate->set_cost( 0 );
        }
    }
    return $rates;
}, 20, 2 );

Đọc dữ liệu vận đơn từ đơn hàng

Plugin lưu mọi thứ vào meta của đơn với tiền tố _supership_:

PHP
$order = wc_get_order( $order_id );
$code   = $order->get_meta( '_supership_code' );    // Mã vận đơn
$status = $order->get_meta( '_supership_status' );  // Trạng thái
$fee    = $order->get_meta( '_supership_fee' );     // Phí vận chuyển
$weight = $order->get_meta( '_supership_weight' );  // Cân nặng SuperShip cân lại
Khoá metaNội dung
_supership_codeMã vận đơn SuperShip
_supership_status · _supership_status_nameTrạng thái dạng mã và dạng chữ
_supership_feePhí SuperShip ghi nhận cho đơn
_supership_weightCân nặng SuperShip cân lại
_supership_service · _supership_warehouseDịch vụ và kho đã dùng
_supership_created_atThời điểm đăng đơn
_supership_auto_statusTrạng thái hàng đợi của tự động đăng đơn: queued · processing · success · error
Thử trên bản sao website trước

Hook woocommerce_package_rates tác động thẳng lên số tiền khách trả. SuperShip không có môi trường thử riêng, nên hãy thử trên bản sao website, hoặc đặt một đơn thử rồi huỷ vận đơn ngay.

Còn vướng chỗ nào thì xem Giải đáp thắc mắc.

Hỗ trợ Zalo