Hook action và filter
Danh sách filter của plugin Đồng bộ KiotViet, đọc trực tiếp từ mã nguồn bản 1.3.4, chia theo việc bạn muốn làm: sửa dữ liệu đơn gửi lên KiotViet, đổi tên địa chỉ, chọn trạng thái coi là đã thanh toán. 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.
Riêng filter kiotviet_sync_option được đọc ngay lúc plugin nạp, trước khi theme nạp. Muốn nó có tác dụng thì đặt trong một file ở wp-content/mu-plugins/.
Phần trang thanh toán Việt Nam ở tab Cài đặt chung là module dùng chung với các plugin DevVN khác, có hook riêng và không liệt kê ở bài này.
Action
Bản 1.3.4 không có action riêng nào chạy trước hay sau khi đồng bộ sản phẩm hoặc đăng đơn. Cần biết một bản ghi đã liên kết KiotViet chưa thì đọc meta plugin lưu:
| Đối tượng | Meta | Ý nghĩa |
|---|---|---|
| Sản phẩm, biến thể | _kiotvietID | ID hàng hoá trên KiotViet. Có meta này mới đồng bộ và đăng đơn được. |
| Sản phẩm cha có biến thể | _kiotvietMasterProductId | ID hàng hoá cha trên KiotViet. |
| Sản phẩm, biến thể | _kiotviet_skip_sync | Giá trị yes khi bật Không đồng bộ từ KiotViet. |
| Sản phẩm, biến thể | _kiotviet_tax_id, _kiotviet_tax_name, _kiotviet_tax_value | Thông tin VAT lấy từ KiotViet, gửi kèm khi bật Gửi VAT khi đăng đơn. |
| Đơn hàng | _kiotviet_order_id, _kiotviet_order_code, _kiotviet_order_status | ID, mã phiếu Đặt hàng trên KiotViet và trạng thái đăng. |
| Người dùng | _kiotviet_customer_id, _kiotviet_customer_code | ID và mã khách trên KiotViet. |
| Danh mục sản phẩm | _kiot_id | ID nhóm hàng trên KiotViet. |
Đơn hàng đọc meta bằng $order->get_meta( '_kiotviet_order_code' ), chạy được cả khi bật HPOS.
Filter: dữ liệu đơn gửi lên KiotViet
Tham số $context là 'create' khi đăng đơn mới, 'update' khi cập nhật. Tham số $shipping_data là dữ liệu từ hộp thoại đăng đơn hoặc từ luồng tự động; $shipping_data['auto_sync'] bằng true khi đơn được tự động đăng.
| Hook | Giá trị lọc, tham số | Dùng để |
|---|---|---|
devvn_kiotviet_sync_order_payload | $kiotviet_order, $order, $shipping_data, $context | Sửa toàn bộ phiếu ngay trước khi gửi: branchId, code, orderDetails, customer, orderDelivery, discount, total, totalPayment, method, status, description, saleChannelId, surchages. Chạy sau cùng. |
devvn_kiotviet_sync_order_line_item | $line_item, $item, $product, $order, $context | Sửa từng dòng sản phẩm (productId, productCode, productName, quantity, price, OrderDetailTaxs). |
devvn_kiotviet_sync_order_details | $order_details, $order, $context | Sửa cả mảng dòng sản phẩm, ví dụ thêm hay bớt dòng. |
devvn_kiotviet_sync_order_customer | $customer_data, $order, $context | Sửa khối khách (name, contactNumber, address, locationName, wardName, email, id, code). Chỉ chạy khi Xử lý khách hàng là Tạo khách mới. |
devvn_kiotviet_sync_order_delivery | $order_delivery, $order, $shipping_data, $context | Sửa khối giao hàng: receiver, type (0 giao thường, 1 giao nhanh, 2 giao trong ngày), contactNumber, address, locationName, wardName, weight (gram), length, width, height (cm). |
devvn_kiotviet_sync_order_description (1.3.4) | $description, $order, $shipping_data, $context | Sửa ghi chú phiếu. Mặc định là nội dung ô Ghi chú gửi KiotViet trong hộp thoại; khi tự động đăng là ghi chú của khách cộng nội dung ô Ghi chú khi tự động đăng. |
devvn_kiotviet_sync_order_surcharges | $surcharges (mảng id, code, price), $order, $shipping_data, $context | Sửa danh sách thu khác. Chạy cả khi ô Đồng bộ phụ thu đang tắt, nên tự dựng phụ thu bằng code được. |
devvn_kiotviet_sync_order_has_paid_statuses | array( 'completed' ) | Trạng thái WooCommerce coi là khách đã trả tiền với đơn không thu tiền khi nhận hàng. Dùng cho số tiền điền sẵn trong hộp thoại và khi tự động đăng. |
devvn_kiotviet_sync_order_statuses | 1 Phiếu tạm, 2 Đang giao hàng, 3 Hoàn thành, 4 Đã hủy, 5 Đã xác nhận | Danh sách trạng thái phiếu Đặt hàng hiện trong Bảng ánh xạ trạng thái, cũng dùng để kiểm mã trạng thái trước khi gửi. |
Filter: địa chỉ gửi lên KiotViet
| Hook | Giá trị lọc, tham số | Dùng để |
|---|---|---|
devvn_kiotviet_sync_location_name_map (1.3.3) | array(), $address | Bảng đổi tên khu vực, phường/xã dạng tên trên web sang tên trên KiotViet. Áp cho đơn hàng, khách trong đơn và hồ sơ khách. |
devvn_kiotviet_sync_location (1.3.3) | $location (locationName, wardName, address), $address | Sửa khu vực, phường/xã, dòng địa chỉ sau khi plugin đã chuẩn hoá. |
devvn_kiotviet_sync_normalize_province_name | $name, $original | Tên tỉnh/thành sau khi chuẩn hoá. |
devvn_kiotviet_sync_matched_location_name | $matched_name, $customer_address | Tên Location KiotViet đã khớp với địa chỉ 3 cấp, sau khi bạn tải danh sách Location. |
Filter: khách hàng, sản phẩm, cài đặt
| Hook | Giá trị lọc, tham số | Dùng để |
|---|---|---|
devvn_kiotviet_sync_customer_branch_id | $branch_id, $options (có order_id khi khách sinh ra từ đơn) | Chi nhánh gửi kèm khi tạo khách mới trên KiotViet. Trả về đúng một ID. |
devvn_kiotviet_variation_gallery_meta_key | $meta_key, $variation_id | Meta lưu ảnh phụ của biến thể, mặc định theo ô Tên meta key. Trả chuỗi rỗng để không lưu. |
devvn_kiotviet_sync_setup_steps | $steps, $main_instance | Thêm, bớt bước trong tab Bắt đầu. Mỗi bước có id, title, required, status, message. |
kiotviet_sync_option | mảng khai báo option (args, group, default) | Đổi giá trị mặc định của các ô cài đặt. Đặt trong mu-plugins. |
Ví dụ hay dùng
Mỗi đoạn dưới đây chép nguyên vào child theme hoặc plugin riêng là chạy, chỉ thay các giá trị đánh dấu.
Đơn nhận tại cửa hàng vào chi nhánh khác
Mọi đơn vào Chi nhánh mặc định. Đoạn này đưa đơn chọn nhận tại cửa hàng sang chi nhánh khác. ID chi nhánh xem bằng cách bấm chuột phải vào ô Chi nhánh mặc định, chọn Kiểm tra (Inspect) rồi đọc thuộc tính value của từng lựa chọn.
add_filter( 'devvn_kiotviet_sync_order_payload', function ( $payload, $order, $shipping_data, $context ) {
if ( $order->has_shipping_method( 'local_pickup' ) || $order->has_shipping_method( 'pickup_location' ) ) {
$payload['branchId'] = 123456; // ID chi nhánh trên KiotViet
}
return $payload;
}, 10, 4 );
Thêm hình thức thanh toán vào ghi chú khi tự động đăng
add_filter( 'devvn_kiotviet_sync_order_description', function ( $description, $order, $shipping_data, $context ) {
if ( empty( $shipping_data['auto_sync'] ) ) {
return $description;
}
return trim( $description . "\n" . 'Thanh toán: ' . $order->get_payment_method_title() );
}, 10, 4 );
Đơn đăng bằng hộp thoại giữ nguyên ghi chú bạn gõ, vì điều kiện auto_sync chỉ đúng khi đơn được tự động đăng.
Coi đơn Đang xử lý là đã thanh toán
Mặc định chỉ đơn Hoàn thành được gửi lên với số tiền khách đã trả bằng tổng đơn. Cổng thanh toán online thường để đơn ở Đang xử lý sau khi nhận tiền:
add_filter( 'devvn_kiotviet_sync_order_has_paid_statuses', function ( $statuses ) {
$statuses[] = 'processing';
return $statuses;
} );
Filter áp cho mọi đơn không thu tiền khi nhận hàng. Website có đơn chuyển khoản tay được chuyển sang Đang xử lý trước khi nhận tiền thì đừng dùng đoạn này.
Gửi tổng khối lượng cả đơn khi tự động đăng
Đoạn này cộng khối lượng mọi dòng sản phẩm nhân số lượng, đổi sang gram theo đơn vị cân nặng của cửa hàng:
add_filter( 'devvn_kiotviet_sync_order_delivery', function ( $delivery, $order, $shipping_data, $context ) {
if ( empty( $shipping_data['auto_sync'] ) ) {
return $delivery;
}
$weight = 0;
foreach ( $order->get_items() as $item ) {
$product = $item->get_product();
if ( $product && $product->get_weight() ) {
$weight += (float) $product->get_weight() * $item->get_quantity();
}
}
if ( $weight > 0 ) {
$delivery['weight'] = (float) wc_get_weight( $weight, 'g' );
}
return $delivery;
}, 10, 4 );
Đổi tên phường/xã mà KiotViet không nhận
Khoá là tên đang có trên web (hoặc tên sau khi plugin chuẩn hoá), giá trị là tên đúng như danh mục khu vực, phường/xã trên KiotViet:
add_filter( 'devvn_kiotviet_sync_location_name_map', function ( $map, $address ) {
$map['Phường Tên Trên Web'] = 'Phường Tên Trên KiotViet';
return $map;
}, 10, 2 );
Bỏ bước Đồng bộ khách hàng khỏi tab Bắt đầu
Cửa hàng không dùng đồng bộ khách hàng thì bước 9 luôn báo Chưa làm và bộ đếm không bao giờ đủ. Đoạn này bỏ bước đó khỏi danh sách:
add_filter( 'devvn_kiotviet_sync_setup_steps', function ( $steps ) {
return array_values( array_filter( $steps, function ( $step ) {
return 'customer-sync' !== $step['id'];
} ) );
} );
Các filter đơn hàng tác động lên phiếu thật trên KiotViet, kể cả số tiền khách đã trả ghi trên phiếu. Thử trên bản sao website với một đơn giá trị nhỏ, đối chiếu trên KiotViet, xong thì xoá phiếu thử.
Còn vướng chỗ nào thì xem Giải đáp thắc mắc.