Mô tả
Init Chat Engine là một plugin khung chat frontend gọn gàng, tối giản, được thiết kế cho giao tiếp ở trang chủ hoặc toàn site với khả năng kiểm soát quản trị toàn diện.
Plugin này là hệ thống người dùng cốt lõi đứng sau Init Plugin Suite – được tối ưu cho tương tác ưu tiên frontend, khả năng mở rộng, và game hóa theo thời gian thực.
Kho GitHub: https://github.com/brokensmile2103/init-chat-engine
Tính năng chính:
Trải nghiệm Frontend:
– Xây dựng 100% bằng REST API và Vanilla JS
– Không jQuery, không cồng kềnh – cực nhanh
– Có thể nhúng hoàn toàn qua shortcode [init_chatbox]
– Hỗ trợ nhắn tin cho khách (tùy chọn)
– Hệ thống polling thông minh (thích ứng 3,5–10 giây theo hoạt động, lên đến 20 giây khi khung chat cuộn ra khỏi tầm nhìn)
– Thông báo trình duyệt khi có tin nhắn mới
– Cuộn lên để tải lịch sử, cuộn xuống để tự động cuộn
– Gửi lạc quan (optimistic sending) & nút nhảy đến “tin nhắn mới”
– Giao diện gọn gàng với các theme có thể tùy chỉnh
– Hỗ trợ ghi đè mẫu (chatbox.php)
Kiểm soát quản trị:
– Bảng cài đặt đầy đủ – Cấu hình Cơ bản, Bảo mật, và Nâng cao
– Quản lý tin nhắn – Tìm kiếm, xem, xóa tin nhắn kèm phân trang
– Kiểm duyệt người dùng – Cấm/bỏ cấm người dùng theo IP hoặc ID kèm thời hạn
– Giới hạn tần suất – Ngăn spam với giới hạn tin nhắn có thể cấu hình
– Lọc từ – Chặn tin nhắn chứa từ cấm
– Bảng thống kê – Xem hoạt động chat, mức độ tương tác người dùng, và xu hướng
– Công cụ dọn dẹp – Dọn dẹp tin nhắn cũ tự động và thủ công
– Hỗ trợ CSS tùy chỉnh – Tùy chọn tùy chỉnh kiểu dáng đầy đủ
Bảo mật & Kiểm duyệt:
– Hệ thống cấm theo IP và theo người dùng
– Giới hạn tần suất có thể cấu hình (tin nhắn mỗi phút)
– Lọc từ với danh sách từ bị chặn tùy chỉnh
– Hàng đợi kiểm duyệt tin nhắn (tùy chọn)
– Tự động dọn dẹp tin nhắn cũ và lệnh cấm hết hạn
– Khả năng ghi đè của quản trị viên
Sẵn sàng đa ngôn ngữ:
– Sẵn sàng cho việc dịch thuật, kèm đầy đủ tệp .pot
– Kèm sẵn bản dịch tiếng Việt
– Dễ dàng dịch sang bất kỳ ngôn ngữ nào
Hoàn hảo cho các site cộng đồng, diễn đàn, fanpage, trang đọc manga, bảng điều khiển SaaS, hỗ trợ khách hàng, hoặc bất kỳ widget chat tương tác nào.
Thuộc tính Shortcode
Shortcode [init_chatbox] hỗ trợ các thuộc tính sau:
height– Đặt chiều cao khung chat (ví dụ:height="400px")width– Đặt chiều rộng khung chat (ví dụ:width="100%")theme– Áp dụng theme tùy chỉnh (ví dụ:theme="dark")show_avatars– Ghi đè cài đặt ảnh đại diện (true/false)show_timestamps– Ghi đè cài đặt dấu thời gian (true/false)title– Thêm tiêu đề chat tùy chỉnhclass– Thêm lớp CSS tùy chỉnhid– Đặt ID khung chứa tùy chỉnhroom– Tên phòng chat (chữ cái, chữ số, dấu-và_). Để trống nếu muốn dùng phòng mặc định (khung chat chính, nơi lưu giữ toàn bộ tin nhắn hiện có). Mỗi phòng có tin nhắn, tin nhắn ghim và giới hạn tin nhắn riêng (ví dụ:room="vip")allow_guests– Ghi đè thiết lập “Allow guests” (Cho phép khách) theo từng phòng (yes/no)max_messages– Ghi đè thiết lập “Maximum Messages” (Số tin nhắn tối đa) theo từng phòng (10–10.000)
Ví dụ: [init_chatbox height="500px" title="Community Chat" theme="modern"]
Ví dụ về phòng: [init_chatbox room="members" title="Members Lounge" allow_guests="no" max_messages="500"]
Mỗi trang chỉ hỗ trợ một khung chat (chatbox). Các thiết lập ghi đè theo phòng (allow_guests, max_messages) chỉ được lưu khi shortcode hiển thị trên nội dung đã xuất bản (không áp dụng trong bản nháp hoặc xem trước), do đó hãy sử dụng các thuộc tính giống nhau ở tất cả những nơi nhúng phòng đó.
Shortcode [init_chat_stats] cũng hỗ trợ thuộc tính room để hiển thị thống kê cho một phòng cụ thể (ví dụ: [init_chat_stats room="vip"]); nếu không truyền thuộc tính này, thống kê sẽ tính cho tất cả các phòng.
Filter dành cho lập trình viên
Plugin này cung cấp các filter và action để lập trình viên mở rộng việc lọc từ, xử lý tin nhắn, và hành vi chat mà không cần chỉnh sửa tệp lõi.
init_plugin_suite_chat_engine_word_filter_strategy
Chỉnh sửa chiến lược lọc từ (substring, word, regex).
Áp dụng cho: Kiểm tra tin nhắn
Tham số: string $strategy, array $settings, string $message
init_plugin_suite_chat_engine_blocked_words
Chỉnh sửa danh sách từ bị chặn trước khi kiểm tra.
Áp dụng cho: Kiểm tra tin nhắn
Tham số: array $blocked_words, array $settings, string $message
init_plugin_suite_chat_engine_bypass_filter
Bỏ qua việc lọc trong các điều kiện tùy chỉnh (VIP, người dùng nội bộ, v.v.).
Áp dụng cho: Kiểm tra tin nhắn
Tham số: bool $bypass, string $message, WP_User|null $user, array $settings
init_plugin_suite_chat_engine_word_block_hit (action)
Được kích hoạt khi một quy tắc lọc từ chặn một tin nhắn.
Áp dụng cho: Kiểm tra tin nhắn
Tham số: string $blocked_word, string $message, string $strategy
init_plugin_suite_chat_engine_enrich_message_row
Mở rộng dữ liệu tin nhắn chat (thêm cờ, metadata, thông tin người dùng, v.v.).
Áp dụng cho: DB backend kết quả xuất JSON
Tham số: array $message_row, WP_User|null $user
init_plugin_suite_chat_engine_message_saved (action)
Được kích hoạt sau khi tin nhắn được lưu.
Áp dụng cho: POST /send
Tham số: int $message_id, string $message, int|null $user_id, string $display_name, string $room (được thêm từ 1.3.9; '' = phòng mặc định)
init_plugin_suite_chat_engine_ip_headers
Chọn các khóa $_SERVER nào được tin cậy (theo thứ tự ưu tiên) khi xác định IP của người truy cập được dùng cho việc cấm (ban) và giới hạn tần suất. Mặc định giữ danh sách hiện tại (các header của Cloudflare / proxy trước, sau đó đến REMOTE_ADDR). Các trang web không nằm sau proxy hoặc CDN có thể trả về array( 'REMOTE_ADDR' ) để ngăn các header X-Forwarded-For giả mạo vượt qua lệnh cấm IP.
Áp dụng cho: Kiểm tra cấm, giới hạn tần suất, ghi nhật ký tin nhắn
Tham số: array $ip_keys
Giấy phép
Plugin này được cấp phép theo GPLv2 hoặc phiên bản mới hơn.
Bạn có toàn quyền sử dụng, chỉnh sửa, và phân phối lại theo cùng giấy phép.
Ảnh màn hình




Cài đặt
- Tải plugin lên thư mục
/wp-content/plugins/. - Kích hoạt plugin qua menu ‘Plugins’ trong WordPress.
- Cấu hình cài đặt trong
Settings → Chat Engine. - Thêm shortcode
[init_chatbox]ở bất kỳ đâu bạn muốn khung chat xuất hiện. - Tùy chọn: Vào
Chat Engine → Managementđể kiểm duyệt tin nhắn và người dùng.
Hỏi đáp
-
Khách có thể gửi tin nhắn không?
-
Có, nếu được bật trong cài đặt plugin ở mục Cài đặt cơ bản. Khách sẽ được yêu cầu nhập tên hiển thị trước khi gửi tin nhắn.
-
Làm sao để kiểm duyệt tin nhắn và người dùng?
-
Vào
Chat Engine → Managementđể xem tin nhắn gần đây, cấm/bỏ cấm người dùng, và xem thống kê chat. Bạn có thể tìm kiếm tin nhắn, xóa nội dung không phù hợp, và cấm người dùng theo IP hoặc tài khoản. -
Plugin có hỗ trợ nhắn tin theo thời gian thực không?
-
Plugin này dùng REST API với polling thông minh (khoảng cách 3,5-10 giây) để tương thích rộng rãi. Không cần thiết lập WebSocket, hoạt động trên mọi hosting.
-
Bao nhiêu tin nhắn được lưu trữ?
-
Có thể cấu hình trong cài đặt (mặc định: 1000 tin nhắn). Tin nhắn cũ sẽ tự động bị xóa khi đạt đến giới hạn. Bạn cũng có thể thiết lập dọn dẹp tự động dựa trên độ tuổi.
-
Tôi có thể tùy chỉnh giao diện chat không?
-
Có, nhiều cách:
– Dùng trường CSS tùy chỉnh trong Cài đặt nâng cao
– Ghi đè mẫu bằng cách đặtchatbox.phpvào thư mụcinit-chat-engine/của theme bạn
– Dùng thuộc tính shortcode cho kiểu dáng cơ bản
– Tắt hoàn toàn CSS của plugin và dùng CSS riêng của bạn -
Hệ thống cấm hoạt động như thế nào?
-
Quản trị viên có thể cấm người dùng theo địa chỉ IP hoặc tài khoản người dùng từ bảng Quản lý. Lệnh cấm có thể tạm thời (kèm ngày hết hạn) hoặc vĩnh viễn. Người dùng bị cấm sẽ thấy thông báo rõ ràng giải thích lý do bị hạn chế.
-
Tôi có thể giới hạn tần suất tin nhắn không?
-
Có, dùng cài đặt Giới hạn tần suất để kiểm soát số tin nhắn người dùng có thể gửi mỗi phút (1-100 tin nhắn). Điều này giúp ngăn chặn spam và lạm dụng.
-
Plugin có sẵn sàng cho việc dịch thuật không?
-
Có, plugin sẵn sàng hoàn toàn cho việc dịch thuật, kèm sẵn bản dịch tiếng Việt. Mọi chuỗi văn bản đều dùng đúng các hàm quốc tế hóa của WordPress.
-
Tôi có thể tạo nhiều phòng chat không?
-
Có (từ phiên bản 1.3.9). Thêm thuộc tính
room:[init_chatbox room="vip"]. Các phòng được tạo tự động từ shortcode và mỗi phòng đều hoạt động độc lập: tin nhắn, tin nhắn ghim và giới hạn tin nhắn. Tên phòng được máy chủ ký xác thực, vì vậy khách truy cập không thể gửi bài vào các phòng không tồn tại trên trang web của bạn. Các quy tắc cấm (bans), giới hạn tần suất (rate limiting), bộ lọc từ ngữ và tuổi tài khoản được dùng chung cho tất cả các phòng. Quản lý các phòng tạiChat Engine → Management(bộ lọc phòng trong Recent Messages và Statistics, cùng với trang tổng quan Chat Rooms). -
Làm sao để sao lưu dữ liệu chat?
-
Tin nhắn chat được lưu trong cơ sở dữ liệu WordPress của bạn, trong bảng
wp_init_chatbox_msgs. Dùng bất kỳ plugin sao lưu WordPress hay công cụ sao lưu cơ sở dữ liệu nào.
Đánh giá
Người đóng góp & Lập trình viên
“Init Chat Engine – Real-Time, Community, Extensible” là mã nguồn mở. Những người sau đã đóng góp vào plugin này.
Những người đóng góp“Init Chat Engine – Real-Time, Community, Extensible” đã được dịch qua 1 ngôn ngữ. Cảm ơn những người tham gia dịch vì đóng góp của họ.
Dịch “Init Chat Engine – Real-Time, Community, Extensible” sang ngôn ngữ của bạn.
Muốn tham gia phát triển?
Duyệt code, check out SVN repository, hoặc theo dõi nhật ký phát triển qua RSS.
Nhật ký thay đổi
1.3.9 – 2 tháng 10, 2025
- Sửa lỗi: Các thẻ chat đang mở có thể bị kẹt và ngừng nhận tin nhắn mới cho đến khi tải lại trang (tiến trình poll liên tục yêu cầu cùng một
after_id) trên các trang web dùng bộ nhớ đệm đối tượng tĩnh như Redis hoặc Memcached. Một yêu cầu poll chậm đọc cơ sở dữ liệu ngay trước khi tin nhắn mới được gửi có thể ghi “ID tin nhắn mới nhất” đã lỗi thời của nó vào cache chung sau khi tin nhắn mới đã xóa nó, khiến mọi client đang ở ID đó đều nghĩ rằng không có gì mới. Các mục cache ở frontend hiện được gắn thẻ bằng token thế hệ (generation token) thay đổi theo từng thay đổi tin nhắn, do đó việc ghi đè trễ không bao giờ ẩn đi các tin nhắn mới hơn. Đã tái hiện và xác nhận đã sửa xong trên bộ nhớ đệm đối tượng Redis thực tế với các yêu cầu đồng thời - Sửa lỗi:
GET /messagesvàGET /user-statushiện gửi các headerno-cache(cùng vớiX-LiteSpeed-Cache-Control: no-cache), đồng thời script chat thực hiện truy vấn vớicache: 'no-store', giúp bộ nhớ đệm trang / CDN (LiteSpeed Cache “Cache REST API”, Cloudflare, Varnish, Nginx FastCGI cache) và trình duyệt không còn trả về phản hồi poll rỗng cũ cho cùng một URL - Sửa lỗi: Yêu cầu bị treo (ví dụ: sau khi máy tính thức dậy từ chế độ ngủ hoặc chuyển đổi mạng) khiến tất cả các lượt poll sau đó bị chặn vĩnh viễn do tiến trình poll sẽ bỏ qua khi có yêu cầu đang chờ xử lý. Hiện tại các yêu cầu sẽ hết thời gian chờ (timeout) sau 20 giây và tiến trình poll sẽ tự động khôi phục
- Hiệu năng: Các truy vấn poll “không có tin nhắn mới” đã được lưu vào bộ nhớ đệm an toàn trở lại (phiên bản 1.3.7 phải tắt tính năng này để tránh tranh chấp dữ liệu ở trên): các yêu cầu poll khi rảnh trên trang web có bộ nhớ đệm đối tượng tĩnh (persistent object cache) sẽ không truy cập vào cơ sở dữ liệu nữa
- Mới: Hỗ trợ nhiều phòng chat. Thêm
room="..."vào[init_chatbox]để tạo một phòng độc lập với tin nhắn, tin nhắn ghim và giới hạn tin nhắn riêng. Các tin nhắn hiện có vẫn nằm ở phòng mặc định, giúp các khung chat hiện tại không bị ảnh hưởng (thuộc tínhidvẫn chỉ là ID của thẻ chứa HTML) - Mới: Tên phòng được máy chủ ký xác thực (HMAC) và chèn vào trang, do đó REST API chỉ chấp nhận các phòng xuất phát từ shortcode trên trang của bạn — không ai có thể tạo hoặc gửi spam vào các phòng ẩn. Hoạt động tốt với bộ nhớ đệm trang (page caching)
- Mới: Cho phép ghi đè thuộc tính shortcode theo từng phòng gồm
allow_guests="yes|no"vàmax_messages="..."(chỉ lưu từ nội dung đã xuất bản, giúp ngăn cộng tác viên thay đổi quy tắc của phòng thông qua bản nháp hoặc xem trước) - Mới: Mục Management Recent Messages bổ sung bộ lọc phòng và cột Room; mục Management Statistics có thể lọc theo phòng và liệt kê tất cả các phòng (số lượng tin nhắn, hoạt động gần nhất, quyền truy cập của khách, giới hạn tin nhắn) đi kèm hành động “Delete Room Messages”
- Mới: Shortcode
[init_chat_stats room="..."]hiển thị thống kê cho một phòng cụ thể - Mới: Giới hạn “Maximum Messages” và tiến trình dọn dẹp hàng ngày hiện được áp dụng riêng cho từng phòng
- Dành cho nhà phát triển: Hook
init_plugin_suite_chat_engine_message_savedhiện nhận tham số phòng chat ở vị trí thứ 5; phản hồi từ các APIGET /messagesvàPOST /sendhiện bao gồm trườngroom - Cơ sở dữ liệu: Thêm cột
roomvà chỉ mục (index)(room, is_deleted, id)vào bảng tin nhắn. Quá trình nâng cấp chạy tự động ở yêu cầu đầu tiên sau khi cập nhật (áp dụng cả ở frontend chứ không chỉ trong wp-admin) và không làm ảnh hưởng đến dữ liệu hiện có - Thêm các chuỗi dịch mới cho tính năng phòng chat (đã cập nhật bản dịch tiếng Việt)
1.3.8 – 1 Tháng 10, 2026
- Sửa lỗi: cài đặt Giới hạn tần suất đã bị bỏ qua — giới hạn được đọc từ một tùy chọn cũ mà trang Cài đặt không còn ghi vào nữa, do đó mọi trang web đều âm thầm bị giới hạn ở mức mặc định 10 tin nhắn/phút bất kể quản trị viên cấu hình thế nào. Giá trị đã lưu hiện đã được áp dụng (các trang web chưa từng lưu cài đặt Bảo mật vẫn giữ mức mặc định 10 như trước)
- Sửa lỗi: sự kiện cron dọn dẹp hàng ngày (và nút “Chạy dọn dẹp ngay”) đã gặp sự cố tương tự với Tin nhắn tối đa và số ngày Dọn dẹp tự động — nó luôn sử dụng các giá trị mặc định (1000 / 30 ngày). Hiện tại nó đã sử dụng các giá trị được cấu hình
- Sửa lỗi: độ dài tin nhắn tối đa đã được tính bằng byte thay vì số ký tự, khiến các tin nhắn tiếng Việt / có dấu / emoji bị từ chối trước khi đạt giới hạn cấu hình mặc dù bộ đếm trên màn hình vẫn báo còn khoảng trống. Độ dài hiện được tính bằng số ký tự, khớp với bộ đếm và mô tả của cài đặt
- Sửa lỗi: việc sử dụng ID thẻ chứa tùy chỉnh (
[init_chatbox id="..."]) đã khiến khung chat không thể tải — script chỉ tìm kiếm ID mặc địnhinit-chatbox-root - Sửa lỗi: trên các trang web sử dụng cấu trúc đường dẫn tĩnh dạng Cơ bản (REST URL dạng
index.php?rest_route=...), khung chat không bao giờ tải được tin nhắn — script đã nối các tham số của nó bằng dấu?thứ hai, tạo ra URL không hợp lệ (HTTP 404). Các tham số truy vấn hiện được nối chính xác cho cả hai kiểu đường dẫn tĩnh - Sửa lỗi: CSS tùy chỉnh chứa bộ chọn con (child selector)
>hoặc dấu ngoặc kép (ví dụ:content: "...",font-family: "...") đã bị lỗi do việc thoát ký tự HTML ở đầu ra. CSS hiện được xuất nguyên vẹn trong khi vẫn loại bỏ các thẻ HTML và vô hiệu hóa</để không thể thoát khỏi thẻ<style> - Sửa lỗi: sau khi chọn Xóa tất cả tin nhắn (hoặc xóa tin nhắn đã ghim từ trang Quản lý / endpoint kiểm duyệt), biểu banner ghim vẫn tiếp tục hiển thị tin nhắn đã xóa vì nó được dựng lại từ một bản chụp (snapshot) được lưu sẵn. Việc xóa bởi quản trị viên giờ đây cũng sẽ bỏ ghim tin nhắn đó (việc tự động cắt bớt tin nhắn cũ theo giới hạn Tin nhắn tối đa sẽ không bỏ ghim)
- Sửa lỗi: việc bỏ cấm theo ID người dùng / IP (không có ID lệnh cấm) đã không xóa bộ nhớ đệm lệnh cấm, khiến người dùng có thể tiếp tục bị chặn cho đến khi bộ nhớ đệm hết hạn; các lệnh cấm tạm thời được lưu trong bộ nhớ đệm giờ đây cũng không bao giờ tồn tại lâu hơn thời gian hết hạn của chúng
- Sửa lỗi: lỗi xác thực đối với Tuổi tài khoản tối thiểu (trên 3650 ngày) không bao giờ hiển thị do nó được thêm vào sau khi thông báo lỗi cài đặt đã được đăng ký
- Sửa lỗi: cờ “has messages” dùng để xác định kích thước khung chat trống đã được lưu bộ nhớ đệm trong một ngày và không bao giờ bị hủy, khiến khung chat vừa mới sử dụng vẫn có thể giữ nguyên giao diện “trống”
- Sửa lỗi: danh sách tin nhắn quản trị có thể hiển thị dữ liệu cũ trong tối đa 5 phút (thiếu tin nhắn mới, sai kích thước trang sau khi thay đổi Tùy chọn hiển thị) trên các máy chủ sử dụng bộ nhớ đệm đối tượng bền vững (persistent object cache). Bộ nhớ đệm danh sách hiện được quản lý phiên bản và làm mới (invalidate) mỗi khi có thay đổi tin nhắn
- Sửa lỗi: việc gỡ cài đặt plugin từng để lại các bảng
init_chatbox_statsvàinit_chatbox_banned, các tùy chọn cài đặt, sự kiện cron dọn dẹp và các Tùy chọn hiển thị (Screen Options) theo từng người dùng. Việc gỡ cài đặt hiện đã xóa hoàn toàn dữ liệu của plugin - Bảo mật: tăng cường xử lý thoát ký tự HTML (escaping) trong script trò chuyện — hàm hỗ trợ trước đó không thoát các dấu ngoặc kép, khiến tên hiển thị cố ý tạo sẵn hoặc liên kết nội bộ trong tin nhắn có thể thoát khỏi thuộc tính HTML (XSS lưu trữ / stored XSS). Các dấu ngoặc kép hiện đã được thoát ở mọi nơi nội dung người dùng được chèn vào mã HTML của khung chat
- Bảo mật: thuộc tính shortcode
themegiờ đây bị giới hạn chỉ gồm các chữ cái, chữ số,-và_trước khi được sử dụng trong đường dẫn template / stylesheet, ngăn chặn lỗi duyệt đường dẫn (path traversal, ví dụ:theme="../../..") - Bảo mật:
GET /user-statuskhông còn tiết lộ toàn bộ bản ghi cấm (ID người dùng của admin thực hiện cấm, địa chỉ IP được lưu);ban_infogiờ đây chỉ chứareason,banned_atvàexpires_at - Bảo mật: bổ sung bộ lọc
init_plugin_suite_chat_engine_ip_headersđể các trang web không nằm sau proxy/CDN chỉ tin tưởngREMOTE_ADDR, ngăn chặn các header chuyển tiếp giả mạo vượt qua lệnh cấm IP và giới hạn tần suất. Hành vi mặc định không thay đổi - Hiệu năng: kết quả “không bị cấm” trước đây chưa bao giờ thực sự được phục vụ từ bộ nhớ đệm (bộ nhớ đệm phủ định lưu giá trị
false, vốn không thể phân biệt với việc bỏ lỡ bộ nhớ đệm – cache miss), do đó mỗi yêu cầu thăm dò (poll) từ mọi client đều truy vấn bảng cấm 1–2 lần. Giờ đây nó đã được lưu trong bộ nhớ đệm chính xác — trên các máy chủ có bộ nhớ đệm đối tượng bền vững (persistent object cache), hầu hết các lượt poll không còn chạm vào bảng cấm nữa - Hiệu năng: việc gửi tin nhắn hiện cập nhật các bộ đếm
total_messages/messages_todaybằng một truy vấn nguyên tử (atomic query) duy nhất cho mỗi bộ đếm thay vì một cặp đọc + ghi, đồng thời khắc phục lỗi thất thoát lượt tăng khi nhiều tin nhắn được gửi cùng một lúc - Hiệu năng: loại bỏ một yêu cầu REST trùng lặp ở mỗi lần tải trang (một yêu cầu
?limit=1riêng biệt chỉ được dùng để đọc tin nhắn đã ghim, vốn đã được trả về ở lần tải tin nhắn ban đầu) - Hiệu năng: danh sách tin nhắn trong trang Quản lý không còn chạy kiểm tra cấm và tra cứu người dùng cho từng hàng (trước đây lên tới 2 truy vấn + 1 tra cứu người dùng cho mỗi hàng trong số 20–200 hàng); các lệnh cấm và người dùng hiện được tải trước một lần cho mỗi trang. Xóa hàng loạt hiện chạy một truy vấn duy nhất thay vì một truy vấn cho mỗi tin nhắn được chọn
- Hiệu năng: kết quả của
[init_chat_stats]được lưu trong bộ nhớ đệm trong 1 phút và chỉ các con số thực sự hiển thị mới được truy vấn (trước đây thực hiện tối đa 6 truy vấnCOUNT(*)ở mỗi lượt xem trang) - Hiệu năng: script trò chuyện không còn bắt buộc tính toán lại kiểu dáng/giao diện (style/layout recalculation) mỗi khi ẩn một phần tử, và việc theo dõi hoạt động di chuyển chuột được tiết chế xuống một lần mỗi giây
- Hiệu năng: IP của người truy cập hiện được xử lý một lần cho mỗi yêu cầu thay vì ở mỗi cuộc gọi kiểm tra cấm / giới hạn tần suất / ghi nhật ký
- Chuỗi dịch mới: “Tên quá dài (tối đa 50 ký tự).” (Đã cập nhật bản dịch tiếng Việt)
- Không có thay đổi nào đối với cấu trúc cơ sở dữ liệu (schema), các REST route, hoặc định dạng phản hồi tin nhắn được sử dụng bởi các tích hợp bên thứ ba
1.3.7 – 21 tháng 8, 2026
- Sửa: tin nhắn bị mất không liên tục trên chat frontend khi có lưu lượng truy cập đồng thời — một tình trạng tranh chấp thời điểm trong bộ nhớ đệm polling của
GET /messagestrước đây có thể khiến một tin nhắn vừa gửi bị âm thầm ẩn khỏi mọi client cho đến khi một tin nhắn sau đó kích hoạt việc xóa bộ nhớ đệm (triệu chứng: tin nhắn thứ 2 không bao giờ hiện, rồi gửi tin thứ 3 làm cả hai hiện cùng lúc; tải lại trang cũng “sửa” được vì việc tải trang dùng đường bộ nhớ đệm riêng, không bị ảnh hưởng). Chỉ tái hiện trên các host có object cache bền vững (Redis/Memcached/v.v.) khi có thời điểm yêu cầu đồng thời; không ảnh hưởng đến việc lưu trữ tin nhắn — chỉ ảnh hưởng đến những gì client polling thấy, và chỉ tạm thời - Sửa: việc kiểm tra yêu cầu tuổi tài khoản (
min_account_age_days) trước đây so sánh giờ địa phương của site với trườnguser_registeredcủa WordPress, vốn luôn được lõi lưu theo UTC — có thể khiến việc kiểm tra bị lệch theo độ lệch UTC của site. Giờ so sánh với timestamp UTC thực - Hiệu năng:
get_all_settings()trước đây có thể được gọi tới 3 lần trong một yêu cầu POST /send (trực tiếp, cộng thêm nội bộ bởi việc kiểm tra tin nhắn và kiểm tra tuổi tài khoản) — giờ được lưu đệm theo từng yêu cầu nên cài đặt chỉ được đọc và gộp một lần - Nội bộ: đã rà soát tuân thủ đầy đủ WordPress Coding Standards (WPCS) — không có ý định thay đổi chức năng; xem ghi chú bên dưới nếu bạn duy trì bản fork hay bản vá riêng cho plugin này
- Đã kiểm chứng bằng so sánh token từng byte với phiên bản trước để xác nhận không có thay đổi logic nào ngoài hai sửa lỗi nêu trên
- Các lệnh gọi
in_array()giờ dùng so sánh nghiêm ngặt (truelàm tham số thứ ba) để tránh các trường hợp ép kiểu do so sánh lỏng lẻo - Mọi điều kiện giờ dùng kiểu Yoda, mọi toán tử ba ngôi ngắn
?:được mở rộng, mọi chú thích nội tuyến kết thúc bằng dấu câu đúng chuẩn, mọi hàm đều có docblock đầy đủ
1.3.6 – 1 tháng 8, 2026
- Cải tiến: dấu thời gian tương đối (“x phút…”) giờ cũng bao gồm tuần, tháng, và năm cho các tin nhắn cũ hơn — trước đây chỉ giới hạn ở “x ngày”
- Thay đổi: đã bỏ hậu tố “trước” khỏi dấu thời gian tương đối để giao diện gọn gàng hơn (ví dụ “2 giờ” thay vì “2 giờ trước”), khớp với quy ước dùng bởi hầu hết các ứng dụng mạng xã hội hiện đại. Người dịch: các chuỗi i18n JS
minutes_ago/hours_ago/days_agođã được đổi tên thànhunit_minutes/unit_hours/unit_days/unit_weeks/unit_months/unit_years— vui lòng cập nhật các bản dịch tùy chỉnh tương ứng - Hiệu năng: polling giờ cũng tính đến việc khung chat có thực sự nằm trong tầm nhìn hay không (qua
IntersectionObserver), không chỉ dựa vào việc tab trình duyệt có đang focus/hiển thị hay không. Nếu khung chat nằm ngoài màn hình ở nơi khác trên một trang dài, polling sẽ giãn ra xa hơn (lên đến 20 giây) và tiếp tục ngay khi nó trở lại tầm nhìn - Không thay đổi schema cơ sở dữ liệu hay cấu trúc phản hồi REST API
1.3.5 – 1 tháng 8, 2026
- Sửa: dấu thời gian (“x phút trước”) trước đây có thể bị kẹt ở “vừa xong” mãi mãi (hoặc hiển thị đã vài giờ ngay sau khi đăng) trên bất kỳ site nào có múi giờ khác UTC. Nguyên nhân do
created_at_isođược tính từ một chuỗi giờ địa phương mà không chuyển sang GMT thực trước — giờ dùngget_gmt_from_date()để có timestamp tuyệt đối chính xác. Chỉ ảnh hưởng đến tính năng dấu thời gian phía client mới bên dưới; không ảnh hưởng đến nội dung, việc gửi, hay thứ tự tin nhắn - Hiệu năng: đã loại bỏ một truy vấn DB dư thừa chạy ở mỗi yêu cầu polling để làm mới dấu thời gian tin nhắn (trước đây lấy + tính lại 50 dòng mỗi 3,5–10 giây cho mỗi client kết nối)
- Hiệu năng: dấu thời gian tương đối (“x phút trước”) giờ được tính phía client và làm mới cục bộ mỗi 60 giây, không cần thêm lượt gọi mạng
- Hiệu năng: đã giới hạn tần suất ghi số liệu
last_activitynên nó chỉ được lưu tối đa một lần mỗi phút thay vì ở mỗi yêu cầu polling, giảm tải ghi DB trên các site đông người truy cập - Hiệu năng: polling giờ tạm dừng hoàn toàn (thay vì chỉ giãn ra) sau 10 phút không hoạt động trên một tab ẩn/không focus, và tiếp tục ngay khi focus
- Hiệu năng: đã thay chỉ mục một cột
idx_is_deletedbằng chỉ mục kết hợp(is_deleted, id)trên bảng tin nhắn — chỉ mục kết hợp đã bao trùm mọi truy vấn mà chỉ mục cũ từng làm, nên giữ cả hai chỉ làm tăng chi phí ghi. Các site hiện có được di chuyển tự động (xóa chỉ mục cũ, thêm chỉ mục mới); các bản cài mới nhận chỉ mục mới trực tiếp - Hiệu năng: đã thêm object cache (
wp_cache_*) choGET /messages— các yêu cầu polling không có tin nhắn mới giờ bỏ qua hoàn toàn cơ sở dữ liệu, và các lần tải trang ban đầu dùng chung một truy vấn đã lưu đệm cho mọi người truy cập thay vì truy vấn riêng cho từng người. Hiệu quả phụ thuộc vào việc host của bạn có cung cấp object cache bền vững hay không (xem FAQ) - Sửa: thao tác “xóa tất cả tin nhắn” dựa trên
TRUNCATEvà cron dọn dẹp tự động hàng ngày trước phiên bản này không làm vô hiệu hóa bất kỳ bộ nhớ đệm nào, nên số liệu/danh sách tin nhắn phía quản trị và (giờ) bộ nhớ đệm frontend có thể hiển thị dữ liệu cũ sau các thao tác đó. Giờ cả hai đều làm vô hiệu hóa mọi bộ nhớ đệm liên quan - Sửa: thao tác xóa qua REST
/admin/moderatetrước phiên bản này không làm vô hiệu hóa bất kỳ bộ nhớ đệm nào - Đã điều chỉnh khoảng polling thích ứng thành 3,5–10 giây (trước đây 2–12 giây) để khớp với hành vi được ghi trong tài liệu và giảm số lượng yêu cầu
- Không thay đổi cấu trúc phản hồi REST API dùng bởi các tích hợp bên thứ ba, ngoại trừ trường nội bộ
updated_messages(không được ghi trong tài liệu, chỉ dùng cho polling) đã bị loại bỏ
1.3.4 – 7 tháng 4, 2026
- Đã sửa lỗi xóa hàng loạt và xóa một tin nhắn không hoạt động do object cache cũ
- Đã thêm
init_plugin_suite_chat_engine_clear_message_cache()để vô hiệu hóa đúng cách danh sách tin nhắn, tổng số lượng, và bộ nhớ đệm thống kê sau mỗi thao tác xóa - Đã sửa xung đột biến nonce giữa trình xử lý hành động đơn và trình xử lý dọn dẹp, có thể khiến việc xác minh dọn dẹp âm thầm thất bại
- Đã thêm hỗ trợ Tùy chọn màn hình cho số tin nhắn mỗi trang có thể cấu hình (mặc định: 20, khoảng: 5–200)
- Tùy chọn số mục mỗi trang được lưu theo từng người dùng qua user meta — không ảnh hưởng đến các quản trị viên khác
- Đã thay API tùy chọn màn hình của WordPress bằng trình xử lý POST trực tiếp để lưu đáng tin cậy hơn
- Không thay đổi schema cơ sở dữ liệu, REST API, hay luồng chat hiện có
1.3.3 – 30 tháng 3, 2026
- Đã thêm hỗ trợ mở rộng/thu gọn cho nội dung tin nhắn ghim trong banner
- Cho phép xem toàn bộ tin nhắn đã ghim mà không cần nhảy đến tin nhắn gốc
- Lưu toàn bộ nội dung tin nhắn qua
datasetđể tránh truy vấn hoặc yêu cầu bổ sung - Đã cập nhật banner ghim để dùng định vị tuyệt đối (absolute), loại bỏ dịch chuyển bố cục (CLS)
- Đảm bảo bố cục ổn định khi banner xuất hiện hoặc cập nhật
- Tinh chỉnh hoạt hình và tương tác để trải nghiệm thời gian thực mượt mà hơn
- Không thay đổi API, cơ sở dữ liệu, hay luồng chat hiện có
1.3.2 – 30 tháng 3, 2026
- Giới thiệu tính năng Ghim tin nhắn cho việc kiểm duyệt chat (chỉ dành cho quản trị viên)
- Cho phép ghim một tin nhắn duy nhất lên đầu khung chat (tự động thay thế lượt ghim trước)
- Đã thêm nút Ghim/Bỏ ghim khi di chuột trên tin nhắn dành cho quản trị viên với xử lý trạng thái động
- Đã triển khai banner tin nhắn ghim với chức năng nhảy đến tin nhắn và hiệu ứng làm nổi bật
- Đã thêm endpoint REST: POST /pin và DELETE /pin (đã xác thực nonce, chỉ dành cho quản trị viên)
GET /messagesgiờ bao gồmpinned_messageđể đồng bộ theo thời gian thực trên các client- Trạng thái ghim được lưu đệm (5 phút) với vô hiệu hóa ngay lập tức khi cập nhật
- Dùng cơ sở dữ liệu hiện có (
init_chatbox_stats) — không cần thay đổi schema - Sẵn sàng hoàn toàn cho dịch thuật qua
InitChatEngineData.i18n - Hoàn toàn tương thích ngược và không ảnh hưởng đến luồng chat hiện có
1.3.1 – 26 tháng 3, 2026
- Tối ưu hiệu năng: đã thêm object cache cho các kiểm tra được gọi thường xuyên
init_plugin_suite_chat_engine_has_messages()giờ được lưu đệm (24 giờ) để giảm truy vấn DB dư thừa khi hiển thịinit_plugin_suite_chat_engine_check_user_banned()giờ dùng bộ nhớ đệm 10 phút với chiến lược đa khóa (ID người dùng + IP)- Đã triển khai vô hiệu hóa bộ nhớ đệm đúng cách khi cấm/bỏ cấm để đảm bảo độ chính xác theo thời gian thực
- Đã thêm bộ nhớ đệm phủ định để loại bỏ các truy vấn lặp lại cho người dùng không bị cấm
- Chỉ tối ưu nội bộ — không thay đổi giao diện hay cơ sở dữ liệu
- Cải thiện khả năng mở rộng và giảm tải cơ sở dữ liệu trong môi trường chat lưu lượng cao
1.3.0 – 2 tháng 3, 2026
- Giới thiệu Yêu cầu tuổi tài khoản tối thiểu mới (cài đặt Bảo mật)
- Quản trị viên giờ có thể yêu cầu người dùng phải có tài khoản cũ hơn X ngày trước khi tham gia chat
- Quy tắc chỉ áp dụng khi chat của khách bị tắt (chế độ yêu cầu đăng nhập)
- Được tích hợp đầy đủ trên cả backend và frontend:
- Endpoint REST
/sendgiờ bắt buộc kiểm tra tuổi tài khoản qua kiểm tra bảo mật tập trung - Hàm dùng chung, tái sử dụng được
init_plugin_suite_chat_engine_check_account_age_requirement()đảm bảo nguồn sự thật duy nhất
- Endpoint REST
- Cải tiến giao diện frontend:
- Ô nhập chat tự động bị vô hiệu hóa (
pointer-events: none; opacity: 0.6) khi tài khoản quá mới - Thông báo cảnh báo nhận biết ngữ cảnh được hiển thị ngay bên dưới khu vực nhập liệu
- Ô nhập chat tự động bị vô hiệu hóa (
- Không ảnh hưởng đến chế độ khách — chat công khai vẫn không bị ảnh hưởng khi khách được phép
- Tương thích ngược với cài đặt và schema cơ sở dữ liệu hiện có
- Cải tiến tập trung vào bảo mật để giảm thiểu spam, tài khoản nhân bản, và hoạt động phối hợp có tổ chức
Xem nhật ký thay đổi đầy đủ (tất cả các phiên bản): Init Chat Engine – Changelog
