Hook action và filter
Danh sách hook của plugin, đọc trực tiếp từ mã nguồn phiên bản 1.3.0. Đủ để đổi nội dung tin, thêm biến vào mẫu, chặn gửi trong một số trường hợp và móc vào luồng đăng nhập — 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.
Các loại tin ($type)
Nhiều hook nhận tham số $type hoặc ghép $type vào tên hook. Bảy giá trị:
$type | Mốc gửi tin |
|---|---|
new_order | Có đơn hàng mới |
new_order_admin | Báo đơn mới cho số điện thoại quản trị OA |
change_order | Đơn có bất kỳ thay đổi trạng thái nào |
change_status · change_status2 | Hai cặp chặng "Từ → đến" cấu hình riêng |
to_completed | Đơn chuyển sang hoàn thành |
reviews_order | Nhắc đánh giá sau N ngày |
Action
| Hook | Tham số | Chạy khi nào |
|---|---|---|
zalooa_send_mess_<type> | $phone, $order | Ngay trước khi plugin gửi tin ZNS cho mốc đó. Móc vào là plugin nhường hẳn việc gửi cho bạn — luồng gửi mặc định không chạy nữa. Xem ví dụ bên dưới. |
zalooa_after_user_feedback | $comment_id, $message | Sau khi đánh giá khách gửi qua Zalo đã được ghi thành comment của WooCommerce. |
zalooa_webhook_event | $event_name, $message, $_POST | Zalo bắn về một sự kiện webhook mà plugin không xử lý sẵn. Đây là chỗ tự bắt các sự kiện khác của OA. |
zalooa_setting_zns_mess | $this | Cuối màn hình cấu hình gửi tin ZNS. Dùng để chèn thêm ô cài đặt của riêng bạn. |
zalo_main_tab | $current_tab | Cuối thanh tab, để thêm tab mới. |
zalo_main_tab_content | $current_tab | Nội dung của tab tự thêm. |
zalooa_before_template_part · zalooa_after_template_part | $template_name, $template_path, $located, $args | Trước và sau khi nạp một template của plugin. |
devvn_otp_login_top · devvn_otp_login_form · devvn_otp_login_middle · devvn_otp_login_bottom | không có | Bốn vị trí trong hộp đăng nhập bằng SĐT + OTP, để chèn thêm nội dung. |
zalooa_license_changed | $valid (bool) | Trạng thái license đổi giữa hợp lệ và không hợp lệ. |
zalooa_license_log | $message | Mỗi dòng nhật ký của phần license. |
Filter — nội dung tin và tham số mẫu
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
mess_filter_content_<ten> | '', $content, $order | Thêm mã thay thế mới. Khai mess_filter_content_ma_giam_gia là dùng được {ma_giam_gia} trong ô tham số. Hook mạnh nhất của plugin. |
zalooa_zns_parameter_filter | $value, $filter, $parameter, $order, $args, $template_id | Sửa giá trị cuối cùng của từng tham số ZNS ngay trước khi gửi. |
zalooa_parameter_filter | $value, $filter, $parameter, $post_data, $args | Như trên nhưng cho luồng không gắn với đơn hàng (chiến dịch, tin theo danh sách). |
zalooa_null_value | '(Không nhập)' | Chữ thay cho giá trị rỗng. |
note_empty_text | '(Không có)' | Chữ thay khi khách không ghi chú. |
payment_empty_text | 'Không rõ' | Chữ thay khi không xác định được hình thức thanh toán. |
payment_str_length | 100 | Cắt bớt tên hình thức thanh toán cho vừa giới hạn của mẫu tin. |
zalooa_new_order_status | 'Đơn hàng mới' | Chữ hiện ở {order_status} cho đơn vừa tạo. |
zalo_payload_format_<type> | $value, $type | Định dạng lại giá trị theo kiểu tham số Zalo yêu cầu. |
Filter — điều kiện và luồng gửi
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
skip_send_zns_on_change_status | false, $order, $from, $to | Trả true để bỏ qua lần gửi đó. Cách sạch nhất để tránh gửi trùng khi bật cùng lúc nhiều mốc. |
send_mess_zns_<type>_data_args | $data_args, $phone, $order, $type | Sửa dữ liệu chuẩn bị gửi cho một mốc, ví dụ đổi sang mẫu tin khác tuỳ điều kiện. |
send_zns_single_args | $body | Sửa nguyên gói dữ liệu gửi sang Zalo. Cẩn thận, đây là tầng thấp nhất. |
send_zns_new_order_to_admin_data | $data | Sửa tin báo đơn mới gửi cho quản trị OA. |
zalooa_sending_mode | '', $body | Đặt chế độ gửi của Zalo cho từng tin. |
error_code_resend_zns | ['-234','-211','-32','-133','-124'] | Danh sách mã lỗi được tự động gửi lại. Thêm mã vào đây nếu gặp lỗi tạm thời khác. |
send_email_notice_error_send_zns | true | Trả false để tắt email báo lỗi gửi tin. |
zns_error_status_skip_notice | mảng mã lỗi | Những mã lỗi không cần gửi email báo. |
zalooa_get_status_complete | ['completed','rated'] | Những trạng thái tin được coi là đã xong, không hiện lỗi nữa. |
zalo_enable_background_process | true | Trả false để gửi thẳng thay vì đưa vào hàng đợi nền. Chỉ dùng khi gỡ lỗi. |
campaign_allow_send | [] | Mảng UID được phép nhận tin chiến dịch. Để trống là gửi tất cả — điền vào thì chỉ những UID trong danh sách nhận được. Rất hợp để chạy thử. |
zalooa_campaign_csv_max_rows | 20000 | Số dòng tối đa mỗi lần import CSV. |
zalooa_campaign_csv_max_size | 5 * MB_IN_BYTES | Dung lượng tối đa của file CSV. |
Filter — kết nối, người dùng OA và Broadcast
| Hook | Mặc định / tham số | Dùng để |
|---|---|---|
getfollowers_count | 50 | Số người lấy về mỗi lô khi bấm lấy danh sách người dùng OA. |
get_user_info_fields | ['id','name','picture'] | Các trường hồ sơ xin từ Zalo khi khách đăng nhập. |
zalooa_pre_access_token | null, $key | Trả về một token để plugin dùng thay vì tự xin. Dùng khi nhiều site chia sẻ chung một token. |
login_with_refresh_token_time | time() + 20 giờ, $expires_in | Thời điểm coi như token hết hạn và cần làm mới. |
zalooa_redirect_uri_prefix | 'zalo-verify-' | Tiền tố của đường dẫn Redirect URI. |
zalooa_has_access_token | bool | Ép kết luận đã có token hay chưa. |
devvn_zalooa_broadcast_stats_manual_max | 50 | Số bài tối đa mỗi lần bấm nút cập nhật số liệu Broadcast. |
devvn_zalooa_broadcast_stats_pages_per_run | 5 | Số trang quét mỗi lần chạy cron Broadcast. |
zalo_debug · webhook_zalo_debug | false | Trả true để ghi nhật ký chi tiết ra file trong thư mục plugin. Chỉ bật khi đang gỡ lỗi. |
Filter — đăng nhập bằng Zalo và OTP
| Hook | Mặc định | Dùng để |
|---|---|---|
zalo_otp_expiration | 180 | Số giây mã OTP còn hiệu lực. |
limit_request_otp | 2 | Số lần được xin mã OTP trong một khoảng thời gian. |
prefix_account_user | 'zalo_' | Tiền tố tên tài khoản WordPress tạo tự động từ số điện thoại. |
zalo_login_domain_email | 'zalo.me' | Tên miền dùng để dựng email giả cho tài khoản tạo tự động. |
skip_email_by_domain | $recipient | Bỏ qua việc gửi email tới những địa chỉ giả đó. |
zalo_login_form_args | $args | Tham số dựng form đăng nhập OTP. |
zalo_login_form_redirect | $redirect | Đường dẫn chuyển tới sau khi đăng nhập thành công. |
devvn_login_otp_account_link | $link | Liên kết trang tài khoản dùng trong luồng OTP. |
valid_otp_out | $out | Kết quả trả về sau khi kiểm tra mã OTP. |
send_zns_otp_args | $body | Sửa gói dữ liệu của tin OTP trước khi gửi. |
zalo_buttons_type | mảng | Danh sách kiểu nút đăng nhập. |
Filter — template và giao diện
| Hook | Mặc định | Dùng để |
|---|---|---|
zalooa_template_path | 'devvn-zalooa/' | Thư mục trong theme dùng để ghi đè template của plugin. |
zalooa_get_template · zalooa_locate_template | $located | Chỉ định thẳng file template cần nạp. |
zalo_status_color | $color, $order | Màu hiển thị trạng thái đơn trong giao diện plugin. |
zalooa_option | mảng | Toàn bộ mảng tuỳ chọn của plugin. |
zalooa_get_default | $out, $name, $type | Giá trị mặc định của một tuỳ chọn. |
Ví dụ hay dùng
Thêm một mã thay thế của riêng bạn
Đây là hook được dùng nhiều nhất. Khai xong là gõ {ma_giam_gia} vào ô tham số ở tab ZNS như mọi mã có sẵn.
add_filter( 'mess_filter_content_ma_giam_gia', function ( $value, $content, $order ) {
$codes = $order->get_coupon_codes();
return $codes ? strtoupper( $codes[0] ) : 'KHONG CO';
}, 10, 3 );
Không gửi tin cho đơn thanh toán chuyển khoản
add_filter( 'skip_send_zns_on_change_status', function ( $skip, $order, $from, $to ) {
if ( 'bacs' === $order->get_payment_method() ) {
return true;
}
return $skip;
}, 10, 4 );
Chỉ gửi tin cho đơn từ 500.000đ trở lên
add_filter( 'skip_send_zns_on_change_status', function ( $skip, $order, $from, $to ) {
return $order->get_total() < 500000 ? true : $skip;
}, 10, 4 );
Cắt tên sản phẩm cho vừa giới hạn của mẫu tin
add_filter( 'zalooa_zns_parameter_filter', function ( $value, $filter, $parameter, $order, $args, $template_id ) {
if ( '{product_name_zns}' === $filter && mb_strlen( $value ) > 60 ) {
return mb_substr( $value, 0, 57 ) . '...';
}
return $value;
}, 10, 6 );
Chạy thử chiến dịch trên đúng vài người
add_filter( 'campaign_allow_send', function ( $uids ) {
return array( 'uid_cua_ban', 'uid_dong_nghiep' );
} );
Bắn thông báo nội bộ khi khách gửi đánh giá qua Zalo
add_action( 'zalooa_after_user_feedback', function ( $comment_id, $message ) {
$comment = get_comment( $comment_id );
if ( $comment ) {
do_action( 'my_shop_new_zalo_review', $comment, $message );
}
}, 10, 2 );
Tự lo hẳn việc gửi tin cho một mốc
Móc vào zalooa_send_mess_<type> là plugin ngừng gửi mốc đó và giao hẳn cho bạn. Chỉ dùng khi thật sự muốn thay toàn bộ luồng.
add_action( 'zalooa_send_mess_reviews_order', function ( $phone, $order ) {
// Tin nhắc đánh giá do hệ thống khác của bạn gửi.
my_crm_send_review_request( $phone, $order->get_id() );
}, 10, 2 );
Bắt một sự kiện webhook Zalo chưa được xử lý sẵn
add_action( 'zalooa_webhook_event', function ( $event_name, $message, $post ) {
if ( 'follow' === $event_name ) {
error_log( 'Co nguoi vua quan tam OA: ' . wp_json_encode( $post ) );
}
}, 10, 3 );
Mọi hook trong nhóm điều kiện và luồng gửi đều tác động thẳng lên tin thật và tiền thật. Bật Chế độ development ở tab ZNS API để tin chỉ đi tới số của quản trị viên, hoặc thử trên bản sao website, rồi mới bật chạy thật.
Còn vướng chỗ nào thì xem Giải đáp thắc mắc.