Give your team a WordPress chat that lives in the admin bar
Internal Chat adds Telegram-style direct messaging between WordPress users, right in the admin bar, so a quick question about a page never has to leave the site.
- A chat icon in the admin bar shows the unread count everywhere.
- Messages update automatically, no page refresh required.
- Restrict who can chat by role, right down to just admins and editors.
- Delete a conversation for yourself, or for everyone if you started it.
What does Internal Chat do?
When the chat module is active, TOWP_Chat adds a chat icon to the WordPress admin bar for any user whose role is allowed to chat, showing their total unread count. Messages get stored in a dedicated towp_chat_messages database table, one row per message, while unread counts, read receipts and per-user deletions live separately in user meta. Because the panel polls for new messages and unread counts every 6 seconds through a nonce-protected AJAX action, a conversation updates without a page refresh, on both the front end and in wp-admin.
Site questions end up scattered across email and chat apps
WordPress tracks users, roles and content in detail, yet it gives two logged-in people no way to simply talk to each other about any of it.
A quick question needs a slower channel
Asking a colleague about a specific page usually means switching to email or a separate chat app, then explaining again which page you meant.
WordPress has no native way for users to message each other
Because that channel doesn't exist by default, a simple question about a page or a setting has nowhere natural to go.
A conversation that lives where the work happens
The module keeps messaging inside WordPress itself, reachable from the same admin bar every logged-in user already sees.
One click from the admin bar
A chat icon sits in the admin bar for every allowed user, with an unread badge that updates automatically.
Updates without a refresh
New messages and unread counts arrive through short polling, so a conversation feels live without needing a page reload.
Limited to the roles you choose
Access is scoped to whichever roles you allow, defaulting to administrators and editors until you configure it otherwise.
Real messaging, built directly into WordPress
Every capability below is present in the supplied PHP class, its AJAX handlers and settings registration.
Direct conversations between users
Any two allowed users can start a conversation, found or started through a searchable user picker.
Admin bar badge
The chat icon carries a live unread count, visible on every admin bar the current user sees, front end included.
Read receipts
A checkmark shows once a message has actually been read, based on the recipient's last-read timestamp for that conversation.
Delete for me, or for everyone
A conversation can be hidden for just you, or permanently deleted for both participants if you're the one who started it.
A sensible message cap
Each message is capped at 5,000 characters, enough for real conversation without inviting an oversized payload.
Full purge for administrators
An administrator can wipe every chat record across the whole site in one action, clearing the database table and all related user meta.
Where in-admin chat helps most
The module supports the quick, contextual questions that don't need a formal ticket or a separate tool.
Content and editing questions
Ask an editor about a specific page or post while you're both already looking at the same site, instead of switching tools to explain it.
Small teams and agencies
Give a small internal team a lightweight way to coordinate on a site, without adding a separate chat platform just for that.
Client and contractor coordination
Scope chat access to just the roles who should be able to reach each other, keeping client-facing accounts out of internal discussion.
Conversations that stay attached to the work
The module combines presence, delivery status and cleanup without adding a separate app to the team's toolkit.
Scoped assets, efficient queries
The verified implementation only loads for users who can actually use it, and keeps its database queries tight.
One dedicated table
Messages live in their own towp_chat_messages table with an index on conversation and timestamp, kept separate from WordPress's own tables.
Loads only for allowed users
The chat icon, panel and its assets only load for a user whose role is actually permitted to chat.
A single query per conversation list
The conversation list gets built from one query that grabs each conversation's first and last message together, rather than one query per conversation.
Role-gated access, nonce on every action
The code re-checks permission on every AJAX action and applies a clear rule for who can delete what.
Nonce-verified on every action
Sending, reading, listing, deleting and purging all call check_ajax_referer() before touching anything.
Role-gated from the start
A user outside the allowed roles never sees the chat icon, and every AJAX action independently re-checks that same permission.
You can't message yourself, and neither can strangers
The send handler blocks a user from messaging their own account and confirms the recipient's role is also allowed to chat before saving anything.
Deletion follows a clear rule
Deleting a conversation for everyone stays limited to whichever participant started it; anyone else can only remove it from their own view.
Built around the same admin bar every user already sees
The supplied code integrates through APIs present in WordPress core. No compatibility claim beyond the verified implementation is assumed.
admin_bar_menu
The chat button registers through the standard admin bar API, appearing consistently on both the front end and in wp-admin.
Custom database table
A dedicated table, created through dbDelta() on activation, stores every message rather than reusing post or comment tables.
AJAX long-polling
New messages arrive through a 6-second polling interval against admin-ajax.php, not a persistent WebSocket connection.
TheOneWP versus common alternatives
Compare the verified Internal Chat implementation with the usual choice between email and a separate external chat tool.
| Capability | TheOneWP Internal Chat | Other common solutions |
|---|---|---|
| Getting started | Built into TheOneWP; nothing extra to install | Usually a separate messaging plugin or an external tool |
| Where it lives | Admin bar icon, visible on every screen | An external app the team has to switch to separately |
| Access control | Scoped to chosen WordPress roles | Often all-or-nothing, or managed in a completely separate system |
| Deletion rules | Per-user hide, or starter-only full delete | Varies; some tools don't distinguish who can delete for everyone |
| Administration | One toggle, plus a full purge for administrators | May require managing a separate account or workspace |
Get your team chatting in four steps
Scope who can chat before opening the first conversation, so the user picker only ever shows the right people.
Enable Chat
Activate the module from the TheOneWP Utility settings tab.
Choose who can chat
Select which roles are allowed to use it; leave it unset to default to administrators and editors.
Start a conversation
Click the chat icon in the admin bar, search for a user, and send the first message.
Stay on top of unread messages
Watch the badge on the chat icon for new activity, and use read receipts to confirm a message landed.
Keep chat useful, not just enabled
A little scoping up front keeps the tool relevant instead of turning into unread-badge noise.
Scope roles to who actually needs it
Because limiting chat to the roles that genuinely coordinate on the site keeps conversations relevant, the user list also stays manageable.
Use "delete for everyone" sparingly
Reserve it for genuine mistakes, since it removes the conversation for both participants permanently.
Don't treat it as a support ticket system
It's built for quick, contextual questions between people already working on the site, not for structured request tracking.
Remember purge is site-wide
The administrator purge action clears every conversation for every user, so use it only when that's genuinely the goal.
Avoid assumptions that cause confusion
The module has clear rules around read status and deletion that are easy to misread at a glance.
Assuming a message is read once it's sent
A checkmark only appears once the recipient's last-read timestamp actually passes that message; sent and read are two different states.
Forgetting the starter-only delete rule
Only the person who started a conversation can delete it for both participants; anyone else can only remove it from their own view.
Running a full purge without warning anyone
The administrator purge deletes every conversation for every user at once, with nothing left to undo afterward.
Internal Chat FAQ
These answers come directly from the verified class, its AJAX handlers and settings registration.
What does Internal Chat do?
It adds direct, Telegram-style messaging between WordPress users, reachable from a chat icon in the admin bar, with messages stored in a dedicated database table.
Who can use the chat?
Only users whose role is on the allowed list, which defaults to administrators and editors until you configure it differently.
Do messages update automatically?
Yes. The panel polls for new messages and unread counts every 6 seconds, so a conversation updates without a page refresh.
How do I know if my message was read?
A checkmark appears once the recipient's last-read timestamp for that conversation passes the time the message was sent.
Can I delete a conversation?
Yes. You can always remove it from your own view; if you started the conversation, you can also delete it permanently for both participants.
Is there a limit on message length?
Yes. Each message is capped at 5,000 characters, enforced on the server as well as suggested in the interface.
Can an administrator wipe all chat data?
Yes. A dedicated purge action, restricted to administrators, clears every message and all related chat data across the whole site.
Does the chat work on the front end of the site, or only in wp-admin?
Both. The admin bar chat icon and panel work anywhere the WordPress admin bar itself is showing.
Can I message a user outside the allowed chat roles?
No. The send action checks that the recipient's role is also permitted to chat before the module saves the message.
Does chat use WebSockets or a persistent connection?
No. It uses short AJAX polling every 6 seconds against admin-ajax.php, rather than a persistent connection.
Stop losing site questions in email.Give your team a chat that lives in wp-admin.
Use Internal Chat to let your team message each other directly from the WordPress admin bar, with read receipts and role-based access built in.

