Skip to main content

Mark as Unread

Compatibility
This feature compatible with Better Messages 3.2.0 or higher

A member who has read a conversation but cannot answer yet can mark it as unread again. The conversation then waits in their list with a dot, as a reminder that something is still to be done there, the way Mark as unread works in WhatsApp and Telegram.

It is in the free and the WebSocket version, and it is on by default.

What a member sees#

  • Mark as unread in the menu of a conversation that is read: a right click on the conversation in the list, a long press on a phone, or the ⋯ button of the row or of the open conversation
  • A dot where the unread count of the conversation goes, with no number
  • The conversation listed by the Unread filter, with the ones that have new messages
  • Every unread counter left as it was: the counter of the messenger, the page title, the badge on the mobile app icon, the unread counter shortcode and the BuddyPress messages count do not count a marked conversation
  • Nobody else is told: no email, push or site notification is sent, and the other participants keep seeing their messages as seen

Marked from an open conversation, the conversation closes and the messenger goes back to the list, and a mini chat window of it closes too. Left open, it would be read again at once.

What ends the mark#

What happensResult
The member opens the conversationThe dot goes, on every device
A new message arrives in itThe dot becomes the usual unread count, and the conversation notifies as any other
The member uses Mark all as readThe dot goes
A message in it is deletedThe dot stays

Opening a marked conversation shows no New messages divider, because no message in it is unread.

Across devices#

The mark follows the member to every browser and app they are signed in to:

  • WebSocket version — within a second, through the realtime connection
  • Free version — with the next check for new messages

Opening the conversation on any of them clears the dot on all of them.

Where it is not offered#

  • A conversation that already has unread messages
  • A presence-based chat room, or a chat room the member has not joined, as neither keeps unread messages for them
  • A conversation embedded on a page with a shortcode, which stays on screen there

How to turn it off#

WP Admin → Better Messages → Settings → Messaging → Conversation Features → Mark as Unread

It is on by default. Turned off, the menu entry is gone and the REST route refuses. A conversation that is already marked keeps its dot until it is opened.

For developers#

  • POST /wp-json/better-messages/v1/thread/{id}/markUnread marks a conversation unread for the current user and answers { "unread": -1 }, see Mark conversation as unread.
  • A marked conversation carries unread: -1 in the conversation object of the REST API, in the better_messages_rest_thread_item filter and in the realtime events. Code that adds the unread values of conversations together should count only the values above 0. get_user_unread_count() already does.
  • Better_Messages()->functions->mark_thread_unread() marks one from PHP, and the better_messages_thread_marked_unread action fires after every mark.
  • The WordPress Abilities API has better-messages/mark-unread, which marks the read conversations it is given and leaves the ones with unread messages as they are.

Frequently asked questions#

Can a member mark a single message as unread?#

No. The whole conversation is marked, as in WhatsApp. It opens as usual, at the newest messages.

Does a marked conversation send an email later?#

No. Email notifications are only sent for unread messages, and a mark is not one. A new message in a marked conversation is emailed as in any other conversation.

Do other participants see that a conversation was marked?#

No. The mark belongs to the member who set it, and the seen ticks of the others do not change.

Does it work with a self-hosted realtime server?#

It needs the first self-hosted release after 2026.10.30.2. With an older self-hosted server, the dot on a WebSocket site goes away within seconds of the mark. The free version does not use the realtime server, so it is not affected.

See also#