An update on the Presence API feature plugin, announced in April. Here’s everything that’s shipped since then.
Current version: 0.14.0. Requires WordPress 7.0 and PHP 7.4.
Recording is on by default. Switch it off for one site on Settings > General, or for every site at once on Network Admin > Settings. If either switch is off, recording is off, and post locks keep working either way (#429, #442). A privacy policy section, exporter and eraser cover presence data too (#449).
From WP-CLI, run wp presence recording set off, or add --network for the whole network.
Network Admin now shows who’s online across every site, with matching REST and WP-CLI. It’s on by default for networks below wp_is_large_network(), and the wp_presence_network_aggregation_enabled filter turns it on or off (#332, #365).
Post locks now live in the presence table instead of post meta, so refreshing a lock no longer invalidates every cached post query on sites with a persistent object cache (#551). Locks keep working with recording switched off (#644).
Presence works on every post type with an editor, including what the Site Editor has open (#631, #638). Roles that can edit only pages or a custom post type get presence too (#637).
Everyone online still appears in the admin bar, but where they are is now behind the view_presence_location capability, which maps to list_users by default (#571). Everyone can always see their own. The admin bar shows whole faces beside My Account (#565, #574). A face is ringed in the person’s block editor color only when you’re both in the same post, the way the editor shows it, and in your admin color scheme everywhere else (#707).
An AI agent editing over REST or MCP sends no Heartbeat, so it wouldn’t show up on its own. As of 0.13.0, each save writes a presence row for it in that post’s room, and the row expires about 75 seconds after its last save by default. The row appears in the admin bar and the Editors column with an Agent badge (#653, #697, #701).
The plugin doesn’t decide who is an agent. It asks the Agent Users plugin through wpai_is_agent_user() when that’s loaded, and any plugin can answer through the wp_presence_is_agent_user filter. With neither, nobody is labeled.
In 0.12.2, each presence query is read once per request until the table changes, which took a Users screen heartbeat from 6 presence reads to 2 (#678). The plugin also stopped checking its tables on every admin page (#657, #682), and only one visible tab per site sends the Heartbeat ping (#675).
wp_presence_get_user_color() returns the block editor’s color for a user ID instead of a stored one (#707).wp_presence_exchange(), wp_presence_leave() and wp_presence_is_available(), documented in the PHP API section of the README (#546, #519).WP_DEBUG on and isn’t in the WordPress.org download, so use a git checkout or the plugin’s Live Preview in Playground.gse-.Discussion and development: #feature-presence-api on WordPress Slack
Bug reports and discussion: GitHub Issues
Thank you to @mindctrl, @iqbal1hossain, and @iamchitti for reviewing this post.
Props to @intenzi, @ashishjii, @iamchitti, @iqbal1hossain, @wp24horas, @aldorza, @bejignesh, @stfulldev, @obenland, @moriikuri, @ishitaj34, @theaminuldev, @muneebashraf, @mindctrl, @zahidui, @mitgiselle, @jaredrethman, @jooahmed and @westonruter for contributing.
This security release features a fix for a critical severity security vulnerability. Because this is…
The full chat log is available beginning here on Slack. WordPress Performance Trac tickets @westonruter…
I’m happy to announce that I am now serving as president of the Open Website…
This security and maintenance release features 17 bug fixes on Core, 19 bug fixes for…
The full chat log is available beginning here on Slack. WordPress Performance Trac tickets @spacedmonkey…
In July, students at two campuses in Kishoreganj, Bangladesh, built 108 websites. In eastern Uganda,…