WordPress team messaging

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.
WordPress Team MessagingInternal Chat
Chat
Team MemberYou: Can you check the homepage?14:49
Today
14:49Can you check the homepage?
Type a message…
Message deliveredRead receipts show once it's seen.
Live
Quick answer

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.

The "where did that message go" problem

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 dedicated WordPress solution

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.

Verified feature set

Real messaging, built directly into WordPress

Every capability below is present in the supplied PHP class, its AJAX handlers and settings registration.

Presence

Admin bar badge

The chat icon carries a live unread count, visible on every admin bar the current user sees, front end included.

Unread badgeFront & back end
Delivery

Read receipts

A checkmark shows once a message has actually been read, based on the recipient's last-read timestamp for that conversation.

Last-read timestampCheckmark
Housekeeping

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.

Per-user deleteStarter-only full delete
Limits

A sensible message cap

Each message is capped at 5,000 characters, enough for real conversation without inviting an oversized payload.

5,000 charactersServer-validated
Administration

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.

manage_optionsFull wipe
Practical use cases

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.

Operational benefits

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.

Context stays attachedBecause a conversation happens while you're both already in wp-admin, there's no need to re-explain which page or setting you mean.
Feels live, not clunkyRegular polling keeps messages and unread counts current without the user ever needing to refresh anything.
You know when it's readA read receipt tells you whether a message actually reached someone, not just whether it was sent.
Cleans up after itselfDeleted conversations and their related meta get properly removed, rather than piling up as orphaned data.
Performance behaviour

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.

Security implementation

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.

01

Nonce-verified on every action

Sending, reading, listing, deleting and purging all call check_ajax_referer() before touching anything.

02

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.

03

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.

04

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.

Verified compatibility

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

admin_bar_menu

The chat button registers through the standard admin bar API, appearing consistently on both the front end and in wp-admin.

admin_bar_menuFront & back end
Storage

Custom database table

A dedicated table, created through dbDelta() on activation, stores every message rather than reusing post or comment tables.

dbDeltatowp_chat_messages
Real-time feel

AJAX long-polling

New messages arrive through a 6-second polling interval against admin-ajax.php, not a persistent WebSocket connection.

admin-ajax.php6-second interval
Solution comparison

TheOneWP versus common alternatives

Compare the verified Internal Chat implementation with the usual choice between email and a separate external chat tool.

CapabilityTheOneWP Internal ChatOther common solutions
Getting started Built into TheOneWP; nothing extra to installUsually a separate messaging plugin or an external tool
Where it lives Admin bar icon, visible on every screenAn external app the team has to switch to separately
Access control Scoped to chosen WordPress rolesOften all-or-nothing, or managed in a completely separate system
Deletion rules Per-user hide, or starter-only full deleteVaries; some tools don't distinguish who can delete for everyone
Administration One toggle, plus a full purge for administratorsMay require managing a separate account or workspace
Recommended workflow

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.

01

Enable Chat

Activate the module from the TheOneWP Utility settings tab.

02

Choose who can chat

Select which roles are allowed to use it; leave it unset to default to administrators and editors.

03

Start a conversation

Click the chat icon in the admin bar, search for a user, and send the first message.

04

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.

Best practices

Keep chat useful, not just enabled

A little scoping up front keeps the tool relevant instead of turning into unread-badge noise.

01

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.

02

Use "delete for everyone" sparingly

Reserve it for genuine mistakes, since it removes the conversation for both participants permanently.

03

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.

04

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.

Common mistakes

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.

Frequently asked questions

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.