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.

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.

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ị:

$typeMốc gửi tin
new_orderCó đơn hàng mới
new_order_adminBá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_status2Hai cặp chặng "Từ → đến" cấu hình riêng
to_completedĐơn chuyển sang hoàn thành
reviews_orderNhắc đánh giá sau N ngày

Action

HookTham sốChạy khi nào
zalooa_send_mess_<type>$phone, $orderNgay 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, $messageSau khi đánh giá khách gửi qua Zalo đã được ghi thành comment của WooCommerce.
zalooa_webhook_event$event_name, $message, $_POSTZalo 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$thisCuố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_tabCuối thanh tab, để thêm tab mới.
zalo_main_tab_content$current_tabNội dung của tab tự thêm.
zalooa_before_template_part · zalooa_after_template_part$template_name, $template_path, $located, $argsTrướ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_bottomkhô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$messageMỗi dòng nhật ký của phần license.

Filter — nội dung tin và tham số mẫu

HookMặc định / tham sốDùng để
mess_filter_content_<ten>'', $content, $orderThê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_idSử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, $argsNhư 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_length100Cắ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

HookMặc định / tham sốDùng để
skip_send_zns_on_change_statusfalse, $order, $from, $toTrả 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, $typeSử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$bodySử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$dataSử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_znstrueTrả false để tắt email báo lỗi gửi tin.
zns_error_status_skip_noticemảng mã lỗiNhữ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_processtrueTrả 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_rows20000Số dòng tối đa mỗi lần import CSV.
zalooa_campaign_csv_max_size5 * MB_IN_BYTESDung lượng tối đa của file CSV.

Filter — kết nối, người dùng OA và Broadcast

HookMặc định / tham sốDùng để
getfollowers_count50Số 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_tokennull, $keyTrả 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_timetime() + 20 giờ, $expires_inThờ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_tokenboolÉp kết luận đã có token hay chưa.
devvn_zalooa_broadcast_stats_manual_max50Số 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_run5Số trang quét mỗi lần chạy cron Broadcast.
zalo_debug · webhook_zalo_debugfalseTrả 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

HookMặc địnhDùng để
zalo_otp_expiration180Số giây mã OTP còn hiệu lực.
limit_request_otp2Số 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$recipientBỏ qua việc gửi email tới những địa chỉ giả đó.
zalo_login_form_args$argsTham 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$linkLiên kết trang tài khoản dùng trong luồng OTP.
valid_otp_out$outKết quả trả về sau khi kiểm tra mã OTP.
send_zns_otp_args$bodySửa gói dữ liệu của tin OTP trước khi gửi.
zalo_buttons_typemảngDanh sách kiểu nút đăng nhập.

Filter — template và giao diện

HookMặc địnhDùng để
zalooa_template_path'devvn-zalooa/'Thư mục trong theme dùng để ghi đè template của plugin.
zalooa_get_template · zalooa_locate_template$locatedChỉ định thẳng file template cần nạp.
zalo_status_color$color, $orderMàu hiển thị trạng thái đơn trong giao diện plugin.
zalooa_optionmảngToàn bộ mảng tuỳ chọn của plugin.
zalooa_get_default$out, $name, $typeGiá 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.

PHP
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

PHP
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

PHP
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

PHP
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

PHP
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

PHP
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.

PHP
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

PHP
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 );
Thử ở chế độ development trước

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.

Hỗ trợ Zalo