Title: ITX UserOps — User Management, Login Activity, Sessions &amp; Audit Log
Author: nanosani
Published: <strong>18 Yulyu 2026</strong>
Last modified: 13 Tuber 2026

---

Search plugins

![](https://ps.w.org/itx-userops/assets/banner-772x250.png?rev=3639231)

![](https://ps.w.org/itx-userops/assets/icon-128x128.png?rev=3639231)

# ITX UserOps — User Management, Login Activity, Sessions & Audit Log

 By [nanosani](https://profiles.wordpress.org/nanosani/)

[Download](https://downloads.wordpress.org/plugin/itx-userops.2.7.0.zip)

 * [Details](https://kab.wordpress.org/plugins/itx-userops/#description)
 * [Reviews](https://kab.wordpress.org/plugins/itx-userops/#reviews)
 *  [Installation](https://kab.wordpress.org/plugins/itx-userops/#installation)
 * [Development](https://kab.wordpress.org/plugins/itx-userops/#developers)

 [Support](https://wordpress.org/support/plugin/itx-userops/)

## Description

WordPress has no unified user administration console. To see who is online, keep
a login audit trail, force-logout a compromised account, disable a departed contractor
without deleting their content, find out whether the password reset actually went
out, or edit a role without deciphering sixty capability checkboxes, you normally
need five or six single-purpose plugins. And none of them tells you when someone
has got in and hidden their tracks from the admin screens.

**ITX UserOps replaces that whole stack with one fast, cohesive console** — the 
kind of user administration Microsoft 365 or Google Workspace admins get out of 
the box — and watches the site itself for the signs a break-in leaves behind.

[Website](https://itxuserops.com/) | [Documentation](https://itxuserops.com/docs/getting-started/)
| [All features](https://itxuserops.com/features/) | [Changelog](https://itxuserops.com/changelog/)
| [Support](https://itxuserops.com/support/)

#### Signs of a break-in, even one that hides from wp-admin

Written from a real case: a site was held for weeks by attackers whose plugins hid
themselves from the Plugins screen, whose administrators were hidden from the Users
screen, and whose script was printed in front of every page. Each of those is now
checked for, on the site itself:

 * An administrator who exists in the database but is hidden from the Users screen,
   or one created by code running on the server with nobody signed in — the file
   that did it is named
 * A plugin hidden from the Plugins screen, one running while the Plugins screen
   calls it inactive, and a plugin, must-use plugin or drop-in that appeared without
   being installed through WordPress
 * Code printed in front of your pages or REST responses. The plugin’s own screens
   read past it and keep working, and show what was added
 * An administrator signed in without the login form — a login cookie issued with
   no sign-in, so no password, two-factor or lockout was ever checked
 * A file inside wp-content that starts WordPress by itself when its address is 
   requested — how backdoor endpoints run. The first week is spent learning what
   is normal on your site
 * Each finding says what happened and what to do. It is logged as **Critical**,
   emailed to the site’s admin address, sent to connected phones, and shown at the
   top of the WordPress Dashboard until it is dealt with
 * Management tools that hide on purpose (MainWP Child, ManageWP Worker, InfiniteWP,
   iThemes Sync) are left alone, and changing your own password or using View as
   is recognised

What it cannot see, plainly: code that loads before this plugin (a must-use plugin
or a db.php drop-in) can hide from any check made inside WordPress, and a file that
never loads WordPress is invisible to it. A new must-use plugin or drop-in is reported
when it appears.

#### What needs your attention, in one place

 * The **Overview**: anything that needs an administrator now, who is online, the
   last 20 things that happened (filter by sign-ins, account changes or warnings)
   and fourteen days of sign-ins
 * Tiles for online now, logins today, failed logins, new users, disabled accounts,
   inactive accounts and security alerts — each opens the matching filtered view
 * Anything urgent also reaches the **WordPress Dashboard** as a notice, until it
   is dealt with or hidden until something new happens
 * Alerts that may not arrive are said out loud: when an email from UserOps cannot
   be sent, that is logged and the Dashboard says so, and it says when security 
   email goes out over the server’s PHP mail with no phone connected to carry alerts
   instead

#### People: every account in one table

 * Every user in one table: online-now indicator, last login, last activity, devices,
   role, status, registered date, post count
 * Server-side search, sorting and pagination — stays fast at 100,000+ users
 * Quick filters that combine: role, status, online now, last login (today / 7 /
   30 / 90 days / never), registered date range, inactive 30/60/90 days
 * Toggleable columns, per-admin, and CSV export

[People documentation ](https://itxuserops.com/docs/console/dashboard/)

#### Disable users without deleting them

 * One click disables an account: the user can no longer log in **on any channel**—
   wp-login, XML-RPC, REST, application passwords — and every active session is 
   destroyed instantly
 * Content, comments and history stay intact
 * Customizable « account disabled » message
 * Safety rails: you can never disable yourself or the last administrator

[Account status documentation ](https://itxuserops.com/docs/console/account-status/)

#### Session management

 * See every active session per user: browser, OS, device, IP, signed-in time, last
   activity
 * Terminate any single session, log a user out everywhere, or log **all** users
   out (your own session survives)

[Sessions documentation ](https://itxuserops.com/docs/console/sessions/)

#### Login and activity log

 * Login activity: every sign-in attempt — success, failed or blocked — with user,
   IP, device, user agent, and which door it came through (login form, XML-RPC, 
   REST API or WP-CLI)
 * Records logins, failed logins (with attempted username), logouts, blocked logins,
   registrations, deletions, role changes, password changes/resets, email and profile
   changes, application passwords, and bulk actions
 * Site visibility: content published/updated/trashed/deleted (with author and actor),
   plugin installs, updates, activations, deactivations and deletions (with where
   each plugin gets its updates: WordPress.org, a vendor, or nowhere), theme switches
   and WordPress core updates
 * Every change to the plugin’s own settings, one entry per save — what changed,
   from what to what, and from where (a screen, WP-CLI, a scheduled task, the mobile
   app or an API key)
 * Four severity levels — Info, Notice, Warning and Critical — charted over the 
   last 14 days
 * **Tamper-evident**: each entry is chained to the one before it, so database-level
   tampering — an edited dump, SQL injection, a rogue database user — is detectable
 * Filter by event, user, actor, IP, severity and date; full-text search; CSV export
 * Configurable retention (30 days up to keep-forever) with daily auto-purge
 * Brute-force flood protection: failed-login noise is aggregated, never table-flooding

[Activity log documentation ](https://itxuserops.com/docs/console/activity-log/)·
[How tamper evidence works ](https://itxuserops.com/docs/console/tamper-evidence/)

#### Email delivery log

 * Every message WordPress hands to the mail server, recorded at the moment of hand-
   off: recipient, subject, timing, and what the server said back
 * Honest states: nothing is labelled « Delivered » or « Sent », because your site
   cannot observe either. The good state is **Handed off**, failures carry the server’s
   error, and results another plugin merely claimed are shown as reported rather
   than observed
 * You choose which kinds of mail are logged — account mail on by default, high-
   volume kinds off — which is what keeps the log small on a busy store
 * Message contents are **not stored unless you switch it on** — and when you do,
   password reset links, one-time codes and application passwords are stripped before
   anything is written, so the log cannot become a way in
 * Its own retention setting with no « keep forever », and one-click deletion of
   stored message contents

[Email log documentation ](https://itxuserops.com/docs/console/email-log/)

#### Role editor

 * WordPress permissions as a grid of **areas** (Posts, Pages, Media, Comments, 
   Users, Site settings, Plugins & themes) against **levels** (None, View, Contribute,
   Manage) — instead of sixty raw checkboxes. Custom post types get their own row
   automatically
 * Start a new role from a template — Site Manager, Content Reviewer, Support Agent,
   and SEO Manager or Order Handler where Rank Math, Yoast or WooCommerce is installed—
   or from a blank role
 * Draft-first: every edit collects into a draft and nothing touches the live role
   until you press Publish
 * A Plain English view of the role as toggleable statements, side-by-side role 
   comparison, and people management — add someone to a role, move people out, reassign
   between roles
 * Capabilities the grid does not manage are never touched, and a role the grid 
   cannot describe shows the exact difference instead of quietly rewriting it on
   save
 * « Restore WordPress defaults » puts the five built-in roles back exactly as WordPress
   ships them
 * Guardrails enforced on the server, not merely hidden in the screen: you cannot
   grant access you do not hold, change your own role, or demote the last administrator—
   and nobody but an administrator can edit an account with more access than their
   own

[Roles documentation ](https://itxuserops.com/docs/console/roles/)

#### Per-user profile drawer

 * Click anyone for an Entra-ID-style panel: an overview with a 30-day sign-in chart,
   live sessions, that person’s complete activity trail, and the mail sent to them—
   without leaving the page
 * Act from the same panel: disable the account, log them out everywhere, send a
   password reset, or view the site as them

[Profile drawer documentation ](https://itxuserops.com/docs/console/profile-drawer/)

#### Bulk actions

 * Multi-select users  change role, disable, enable, log out, send password reset,
   delete with content reassignment, export to CSV
 * Runs in batches with a progress bar — no timeouts on large sites

[Bulk actions documentation ](https://itxuserops.com/docs/console/bulk-actions/)

#### Stop PHP running from uploads

 * One switch in Settings stops PHP files in wp-content/uploads from being run by
   visiting their address — the way a backdoor dropped there is used
 * Plugins that keep PHP in uploads and load it from inside WordPress are not affected,
   and nothing is deleted
 * On Apache and LiteSpeed the rule is written for you and then proved with a harmless
   test file, so the screen says whether your server actually obeys it; on nginx
   it shows the rule to give your host

#### Works behind Cloudflare and reverse proxies

 * Behind a CDN, load balancer or reverse proxy, logs normally record the proxy’s
   address instead of the visitor’s. Name your proxy (Cloudflare’s ranges are built
   in) and the real client IP is recorded instead
 * Forwarding headers are only trusted when the request genuinely arrives from a
   configured range, so they cannot be forged

[Client IP documentation ](https://itxuserops.com/docs/console/proxies/)

#### Privacy and GDPR

 * GDPR mode zeroes the last part of every captured IP before it is stored
 * Log retention is capped and auto-purged; email bodies are opt-in and redacted
 * Uninstalling can remove every trace of plugin data — your choice, off by default

[Privacy documentation ](https://itxuserops.com/docs/reference/privacy/)

#### Mobile app

Your sites in your pocket, free: who is online, sign-ins and failed sign-ins, recent
activity and the people on the site — with the buttons to disable or re-enable an
account, sign someone out everywhere, or send a password reset. Alerts arrive on
signs of a break-in, and when an administrator account appears, someone is made 
an administrator, sign-ins fail in a burst, or an account is disabled by someone
else; each can be switched off per phone.

Connect a phone from **ITX UserOps  Mobile app**: scan the code with your phone’s
camera, approve the connection on your site, and allow notifications. The app is
a web app at app.itxuserops.com — nothing to install from a store — and it talks
to your site directly, signing in with an application password made just for that
phone. Disconnecting a phone revokes its password. Your site needs HTTPS for a phone
to connect. See External services below for what leaves your site, and when.

#### Extras

 * Live « online users » count in the admin bar and a user-overview dashboard widget
 * Online status and a UserOps details link right in the native Users screen
 * Works on multisite — each subsite gets its own console ([multisite notes ](https://itxuserops.com/docs/console/multisite/))

#### Performance

Built to a strict budget: front-end requests incur at most one throttled database
write per user per minute — no admin-ajax polling, no autoloaded bloat. Logs live
in their own indexed tables, never in wp_options. The break-in checks run on a schedule
and on the plugin’s own screens, not on your visitors’ page views. The plugin loads
no remote assets, and makes no external HTTP requests except to deliver notifications
to phones you have connected to the mobile app (see External services).

[Performance notes ](https://itxuserops.com/docs/reference/performance/)

#### Free, and complete

Everything described above is free, fully functional, and stays that way. A separate
premium edition exists for security teams — two-factor enforcement, passkeys, your
own alert rules on any event, one-click responses to a break-in, file-change monitoring,
temporary accounts, delegation and more — described at [itxuserops.com/pricing](https://itxuserops.com/pricing/).
Nothing on this page requires it.

### Development

The admin interface is a React app built with @wordpress/scripts. The
 human-readable
source lives in `assets/src/`; the compiled bundle in assets/build/ is generated
with:

    ```
    npm install && npm run build
    ```

The app uses the @wordpress/* packages that ship with WordPress core, and
 bundles
one third-party library: `qrcode` (MIT, https://github.com/soldair/node-qrcode),
which draws the mobile app’s pairing code in your browser so no image service is
involved. The plugin loads no remote assets.

### External services

ITX UserOps contacts no outside service on its own. Once a day it requests
 your
own site’s front page and REST index, to check for code printed in front of them;
those requests go to your site and nowhere else. Two things happen only when you
connect a phone to the mobile app, and stop when you disconnect it.

**The ITX UserOps mobile app (app.itxuserops.com).** The pairing code on the
 Mobile
app screen is drawn in your browser and contains your site’s address. Scanning it
opens app.itxuserops.com in your phone’s browser with that address filled in. From
then on the phone talks to your site directly; your site never sends anything to
app.itxuserops.com, and the app keeps your site’s address and the phone’s application
password on the phone only. Terms: https://itxuserops.com/terms/ — Privacy: https://
itxuserops.com/privacy/

**Web Push (your phone browser’s notification service).** If you allow
 notifications
on a connected phone, its browser gives your site an address at the browser maker’s
push service — Google (Chrome and Android), Apple (Safari and iOS), Mozilla (Firefox)
or Microsoft (Edge). When an alert is due, your site sends the notification there
to be delivered: the title and a short line of text, encrypted end to end (RFC 8291)
so the push service cannot read them, with a signature identifying your site’s push
key (VAPID). Nothing is sent until a phone has allowed notifications, and only that
phone’s address is used. Google: https://policies.google.com/privacy — Apple: https://
www.apple.com/legal/privacy/ — Mozilla: https://www.mozilla.org/privacy/firefox/—
Microsoft: https://privacy.microsoft.com/privacystatement

## Screenshots

[⌊Overview — what needs your attention, who is online now, and what just happened⌉⌊
Overview — what needs your attention, who is online now, and what just happened⌉[

Overview — what needs your attention, who is online now, and what just happened

[⌊People — every account with its online status, last login, last activity and devices⌉⌊
People — every account with its online status, last login, last activity and devices⌉[

People — every account with its online status, last login, last activity and devices

[⌊A person's profile: sign-ins over 30 days, sessions, activity and one-click account
actions⌉⌊A person's profile: sign-ins over 30 days, sessions, activity and one-click
account actions⌉[

A person’s profile: sign-ins over 30 days, sessions, activity and one-click account
actions

[⌊The activity log with a chart per severity — here, a plugin hidden from the Plugins
screen, logged as Critical⌉⌊The activity log with a chart per severity — here, a
plugin hidden from the Plugins screen, logged as Critical⌉[

The activity log with a chart per severity — here, a plugin hidden from the Plugins
screen, logged as Critical

[⌊A Critical finding explained: what happened, what to do, and the full record behind
it⌉⌊A Critical finding explained: what happened, what to do, and the full record
behind it⌉[

A Critical finding explained: what happened, what to do, and the full record behind
it

[⌊The same finding at the top of the WordPress Dashboard⌉⌊The same finding at the
top of the WordPress Dashboard⌉[

The same finding at the top of the WordPress Dashboard

[⌊Login activity — successes, failures, blocked attempts and logouts over 14 days⌉⌊
Login activity — successes, failures, blocked attempts and logouts over 14 days⌉[

Login activity — successes, failures, blocked attempts and logouts over 14 days

[⌊Email delivery — what the site handed to the mail server, including its own alerts⌉⌊
Email delivery — what the site handed to the mail server, including its own alerts⌉[

Email delivery — what the site handed to the mail server, including its own alerts

[⌊The role editor — areas and levels instead of sixty raw capabilities⌉⌊The role
editor — areas and levels instead of sixty raw capabilities⌉[

The role editor — areas and levels instead of sixty raw capabilities

[⌊Settings — staff and customers, log retention, privacy and which mail is logged⌉⌊
Settings — staff and customers, log retention, privacy and which mail is logged⌉[

Settings — staff and customers, log retention, privacy and which mail is logged

## Installation

#### Minimum requirements

 * WordPress 6.6 or newer
 * PHP 7.4 or newer
 * Works on single sites and multisite networks
 * The mobile app needs the site to be served over HTTPS

[Requirements in detail ](https://itxuserops.com/docs/getting-started/requirements/)

#### Installing from your WordPress dashboard (recommended)

 1. Sign in to your WordPress admin and go to **Plugins  Add New Plugin**
 2. Search for **ITX UserOps**
 3. Click **Install Now**, then **Activate**

#### Installing by upload

 1. Download the plugin zip from this page
 2. In your WordPress admin, go to **Plugins  Add New Plugin  Upload Plugin**
 3. Choose the zip, click **Install Now**, then **Activate**

Or unzip it into `wp-content/plugins/` over SFTP and activate from the Plugins screen.

[Installation guide ](https://itxuserops.com/docs/getting-started/install/)

#### After activation

Activation changes nothing on your site: no role is edited, no existing data is 
touched. The console appears as **ITX UserOps** in the admin menu — open **Overview**
or **People** and your users and sessions are already there; logging starts from
the moment the plugin is active. The break-in checks start straight away too, and
spend their first week learning which files on your site normally start WordPress
by themselves.

A guided tour of what to look at first — the overview, login activity, retention
settings, and proxy configuration if you are behind Cloudflare — is in [Your first hour ](https://itxuserops.com/docs/getting-started/first-hour/)

#### Updating

Update from the Plugins screen like any other plugin. Database schema upgrades run
automatically and every step is additive — existing log entries stay readable.

#### Uninstalling

Deactivating stops all recording and clears the plugin’s scheduled tasks. Uninstalling
keeps your data by default; if you want a complete removal, enable **Delete all 
plugin data on uninstall** in ITX UserOps  Settings first, and uninstalling then
removes every table, option and user-meta entry the plugin ever created.

## FAQ

### How do I disable a WordPress user without deleting them?

Open ITX UserOps  People, click the person, and choose « Disable account ». They
immediately lose access on every login channel while their content and history remain
untouched. Re-enable them any time.

### How do I log out all WordPress users at once?

ITX UserOps  People  « Log out all users ». Every session on the site is destroyed
except your current one.

### How can I see who is currently online?

The Overview lists everyone online now, and on the People screen the « Online » 
column shows a live indicator for every user with activity in the last 5 minutes;
the « Online » switch lists exactly who is connected.

### What happens when it finds signs of a break-in?

The finding is logged as Critical with what happened and what to do, emailed to 
the site’s admin address, sent to any phone connected to the mobile app, and shown
at the top of the WordPress Dashboard and the UserOps Overview until it is dealt
with. Nothing on your site is changed automatically.

### Is it a malware scanner?

No. It does not scan files for known malware. It watches WordPress itself for the
things a break-in has to do to stay in — hide an administrator or a plugin, put 
an account in without the login form, run code from a file in wp-content, print 
script into your pages — which a scanner looking for known code can miss. It works
well alongside one.

### Does it slow down my site?

No. Visitors trigger zero extra queries. Logged-in users trigger at most one tiny
indexed write per minute. All heavy lifting happens only on the plugin’s own admin
pages and scheduled tasks.

### Is it GDPR friendly?

Yes. Enable « Anonymize IP addresses » and the last octet of every captured IP is
zeroed before storage. Log retention is capped and auto-purged, and uninstalling
can remove every trace of plugin data.

### Does it work on multisite?

Yes — each subsite gets its own console, log and settings. Subsite admins cannot
disable super admins or change their role.

### Where is the audit log stored?

In its own indexed database table — not in wp_options or postmeta — so a busy log
never slows down the rest of your site.

## Reviews

![](https://secure.gravatar.com/avatar/7e5a89aac682c827d358d58deeaf7fc39ed38072103c9c09205bd3cb4b79e8d7?
s=60&d=retro&r=g)

### 󠀁[Highly recommend](https://wordpress.org/support/topic/highly-recommend-226/)󠁿

 [bilalahmad7690](https://profiles.wordpress.org/bilalahmad7690/) 19 Γuct 2026 1
reply

ITX UserOps is a powerful and user-friendly WordPress plugin for managing websites
with a large number of users. Its real-time user monitoring, activity tracking, 
session management and bulk user controls make user administration much easier and
more efficient. Highly recommended for sites that need better user management and
monitoring.

![](https://secure.gravatar.com/avatar/ab608a4f2304624ea344b4eb1e9018a364c7bff5571424f37758446ecf9b0ca4?
s=60&d=retro&r=g)

### 󠀁[From now onwards, its in my essential plugins kit!](https://wordpress.org/support/topic/from-now-onwards-its-in-my-essential-plugins-kit/)󠁿

 [Abdul Wahab](https://profiles.wordpress.org/abdulwahab12197/) 20 Yulyu 2026 1 
reply

Excellent plugin for managing and monitoring WordPress users. The login history 
is clear and very helpful for tracking user access. I especially like the ability
to disable accounts and log users out instantly without affecting their content.
Highly recommended.

 [ Read all 2 reviews ](https://wordpress.org/support/plugin/itx-userops/reviews/)

## Contributors & Developers

“ITX UserOps — User Management, Login Activity, Sessions & Audit Log” is open source
software. The following people have contributed to this plugin.

Contributors

 *   [ nanosani ](https://profiles.wordpress.org/nanosani/)

[Translate “ITX UserOps — User Management, Login Activity, Sessions & Audit Log” into your language.](https://translate.wordpress.org/projects/wp-plugins/itx-userops)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/itx-userops/), check
out the [SVN repository](https://plugins.svn.wordpress.org/itx-userops/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/itx-userops/) by
[RSS](https://plugins.trac.wordpress.org/log/itx-userops/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 2.7.0

 * New: signs of a break-in that hides from wp-admin. Written from a real case: 
   a site running this plugin was held for weeks by attackers whose plugins hid 
   themselves from the Plugins screen, whose administrators were hidden from the
   Users screen, and whose script was printed in front of every page. Each of those
   is now checked for, on the site itself:
 * An administrator who exists in the database but is hidden from the Users screen.
   The plugin reads the accounts straight from the database and compares them with
   what WordPress lists; a difference means code on the site is hiding someone.
 * An administrator created by code running on the server with nobody signed in —
   by a scheduled task, an ordinary request, or a file inside wp-content that loads
   WordPress itself (the shape of a backdoor). The file is named in the log. One
   made from WP-CLI is noted as a warning.
 * A plugin hidden from the Plugins screen, or one that is running while the Plugins
   screen calls it inactive. Management tools that hide on purpose (MainWP Child,
   ManageWP Worker, InfiniteWP, iThemes Sync) are left alone while they update from
   WordPress.org.
 * A plugin, must-use plugin or drop-in that appeared without being installed through
   WordPress — by FTP, a file manager or a backdoor — and a folder in wp-content/
   plugins that is not a plugin at all.
 * Code printed in front of the site’s pages or its REST responses. The plugin’s
   screens now read past it and keep working, show what was added in a red banner,
   and record it; once a day the site also checks its own front page and REST index.
 * An administrator signed in without the login form — a login cookie issued with
   no sign-in, so no password, two-factor or lockout was checked. Critical when 
   a file inside wp-content did it. Changing your own password, View-as, and the
   User Switching plugin are recognised.
 * A file inside wp-content that starts WordPress by itself when its address is 
   requested — how backdoor endpoints run. For the first week after install these
   are learned quietly (some plugins have one); after that a new one is reported,
   then at most once a day while it keeps being used. A file in uploads, in a folder
   that is not a plugin, or in a hidden plugin is reported even in the first week.
   Mark a file you recognise as expected from its entry in the activity log.
 * New: plugin installs, updates and deletions are logged, with where each plugin
   gets its updates (WordPress.org, a vendor, or nowhere).
 * New: alerts that may not arrive. When an email from UserOps (an alert, a sign-
   in code) cannot be sent, that is logged — once an hour at most — and the WordPress
   Dashboard says so. The plugin also works out how this site sends mail (an SMTP
   plugin, a mail service, or the server’s own PHP mail — including FluentSMTP installed
   with no connection set up), and the Dashboard says plainly when security email
   goes out over PHP mail with no phone connected to carry alerts instead.
 * New: a Critical level in the activity log, above Warning, for signs of a break-
   in only. Critical events are emailed to the site’s admin address and sent to 
   connected phones as « Signs of a break-in », and they are listed on the WordPress
   Dashboard until dealt with. Each one says what happened and what to do.
 * The admin-bar online counter keeps updating on a site that injects code in front
   of REST responses.
 * Fixed: times shown to the second in the activity and email logs read « 5:19 pm:
   03 » on sites using a 12-hour clock (WordPress’s default). They now read « 5:
   19:03 pm ».
 * Fixed: on the 30-day sign-in chart in a person’s profile, the last two dates 
   were printed on top of each other.
 * Fixed: in the email log, « Handed off — reported by another plugin » ran into
   the next column instead of wrapping.
 * What these checks cannot see: code that loads before this plugin (a must-use 
   plugin, or a db.php drop-in) can hide from any check made inside WordPress, and
   a file that never loads WordPress is invisible to it. A new must-use plugin or
   drop-in is reported when it appears.

#### 2.6.1

 * Released alongside ITX UserOps Premium 3.6.1, so the two stay in step. Everything
   new since 2.4.0 is listed under 2.6.0 below.

#### 2.6.0

 * New: the mobile app is free. ITX UserOps  Mobile app shows what it does, connects
   a phone in three steps — scan a code drawn on this screen, approve the phone 
   on your site, allow notifications — and lists the phones connected. Before you
   start, it checks HTTPS, application passwords, whether your server passes the
   app’s sign-in on, and whether it can send notifications. The app shows who is
   online, sign-ins, recent activity and people, and lets you disable or re-enable
   an account, sign someone out everywhere, or send a password reset.
 * New: four alerts on connected phones, each switchable per phone — an administrator
   account is created, someone is made an administrator, sign-ins fail in a burst,
   or an account is disabled or re-enabled by someone else.
 * New: the Overview is a dashboard — who is online now, the last 20 things that
   happened (filter by sign-ins, account changes or warnings), and fourteen days
   of sign-ins, each loading on its own.
 * New: what needs an administrator now reaches the WordPress Dashboard — a notice
   at the top for anything urgent (until it is dealt with, or hidden until something
   new happens) and a list at the top of the UserOps dashboard widget — as well 
   as the Overview.
 * New: every change to the plugin’s settings is written to the activity log as 
   one entry per save — what changed, from what to what, and from where (a screen,
   WP-CLI, a scheduled task, the mobile app or an API key). Secrets are never written;
   their entries say « changed ».
 * Security: the Settings screen and its settings, and viewing the site as another
   user, now ask whether you may manage the site and that account — not only whether
   you can open the UserOps console. That matters wherever another plugin or role
   gives the console to someone who is not an administrator.
 * Security: on multisite, a site’s own administrator can no longer change or remove
   a super admin’s role on that site.
 * Security: a connected phone’s notifications can no longer be moved to another
   account’s device by someone who learns its push address.
 * Fixed: an old link to the Login log (a bookmark, an email) now keeps its filters,
   and the Overview’s login tiles open the log already filtered.
 * Fixed: plugin upgrades no longer log invalid database statements; a comment inside
   a table definition was being read as a column.
 * Fixed: a plugin upgrade no longer re-applies the type of every column in the 
   plugin’s tables — up to 191 database statements on MariaDB, or on WordPress before
   6.9. It now changes only what the new version changes.
 * Fixed: an IP range written with a malformed prefix length (10.0.0.0/nope) now
   matches nothing, instead of every address.
 * Fixed: on servers without mbstring, a stored email body cut at the size limit
   could end in half a character.
 * Exported files are named for the plugin: itx-userops-users-….csv, itx-userops-
   activity-….csv.
 * The Mobile app screen keeps its margin on the right, and its list of phones scrolls
   on a phone instead of spilling out of the card.
 * External services: connecting a phone to the mobile app uses app.itxuserops.com(
   in the phone’s browser) and, once the phone allows notifications, the browser
   maker’s Web Push service. Nothing is contacted until you connect a phone. See
   External services.

#### 2.5.0

 * New: Settings  PHP in uploads. One switch stops PHP files in wp-content/uploads
   from being run by visiting their address — the way a backdoor dropped there is
   used. Files are not removed, and plugins that keep PHP in uploads (WPML’s template
   cache, a theme’s saved settings) are not affected, because they load it from 
   inside WordPress. On Apache and LiteSpeed the rule is written to uploads/.htaccess,
   next to whatever else is there, and then proved by requesting a harmless test
   file; the screen says whether the server actually obeys it. On nginx the screen
   shows the rule to give your host. Uninstalling removes the rule.

#### 2.4.1

 * Fixed: 2.4.0 did not actually keep the Bing Webmaster Tools and IndexNow bundles
   off the plugin’s screens. Both plugins give WordPress their file addresses in
   a roundabout form (« admin/../static »), and 2.4.0 compared the addresses as 
   written instead of as the browser requests them. No other change.

#### 2.4.0

 * New: role templates. « New role » now offers a starting point as well as a blank
   role — Site Manager (runs the site day to day without plugins, themes, code or
   settings), Content Reviewer (edits anyone’s drafts, cannot publish or delete),
   Support Agent (helps customers and subscribers with their accounts) and, where
   the plugin is installed, SEO Manager (Rank Math or Yoast) and Order Handler (
   WooCommerce). A template only sets where a role starts; it is an ordinary role
   afterwards.
 * Security: nobody but an administrator can now edit, delete or change the role
   of an account with more access than their own, or hand out a role with more access
   than their own. WordPress lets anyone holding edit_users edit any account, administrators
   included — harmless while only administrators hold it, an account takeover the
   moment a role editor gives it to anyone else. This also narrows delegated administrators
   in the same way.
 * WooCommerce no longer sends people whose work is in wp-admin but not in posts—
   order handlers, support staff, the read-only plugins list — to My Account.
 * Fixed: on sites running LiteSpeed Cache with « Cache REST API » and « Cache Logged-
   in Users » switched on, the role list kept showing an old copy for up to half
   an hour — a new role was created but never appeared, and each further click created
   another « Custom role 1 ». The plugin’s screens now tell LiteSpeed not to cache
   them.
 * Fixed: two roles can no longer end up with the same name; a repeated name is 
   numbered.
 * Faster screens where Bing Webmaster Tools or IndexNow is installed: both load
   their whole app on every admin page, re-downloaded on every visit, and the plugin’s
   own screens no longer carry it.

#### 2.3.1

 * Fixed: « View » on the Plugins & themes row of the role grid is now genuinely
   read-only. It used to grant the ability to switch the site’s active theme and
   to edit menus, widgets and the Customizer, and it showed no plugins at all. WordPress
   has no read-only capability for plugins or themes, so View now grants this plugin’s
   own and opens a new read-only Plugins & themes screen: every plugin and theme,
   its version, whether it is active, and whether an update is waiting — with nothing
   on it that changes anything.
 * New: an Appearance row in the role grid for menus, widgets and the Customizer,
   so giving an editor the menus no longer means giving them the theme.
 * On upgrade, roles the grid had put on the old View are corrected to the read-
   only one, and administrators are told which roles changed. Roles arranged any
   other way — including one that was also given activate_plugins by hand — are 
   left exactly as they are.

#### 2.2.2

 * Fixed: « Duplicate Administrator » was refused with « You cannot grant access
   you do not have yourself » on most sites. WordPress switches some of the administrator’s
   capabilities off at run time (file editing when DISALLOW_FILE_EDIT is set, the
   Links manager, unfiltered uploads), and WooCommerce stores per-item ones, and
   the role editor read all of those as not held. Capabilities your own role grants
   can now be copied. No other change.

#### 2.2.1

 * Fixed: 2.2.0 as published was missing two files, and sites that updated to it
   stopped loading with a « Class not found » error for the DNS Toolbox integration.
   This release contains them. No other change.

#### 2.2.0

 * Changed: the console is reorganised into sections that match the job rather than
   the feature list. Overview, People, Access, Activity, Settings. Nothing has been
   removed and nothing has moved out of reach — the Login Log, Activity Log and 
   Email Log are now tabs of Activity, and the role editor is a tab of Access.
 * Changed: the dashboard is split in two. Overview answers « is anything wrong »
   and every figure on it is a link into the exact filtered list that explains it;
   People is the account directory and everything you do to one person. Previously
   the same screen tried to be both, and clicking a summary figure filtered a table
   further down the page rather than taking you anywhere.
 * Every page now says in one line what it answers, because this is a console people
   open weeks apart and a bare noun heading is decoded from scratch every time.
 * Every tab has its own address. Links into the console — from a bookmark, from
   documentation, or from an alert — open the exact tab they name, and the address
   bar follows the tab you are on so you can copy what you are looking at.
 * Old bookmarks keep working: every retired page address resolves to the tab that
   now holds what it used to show.

#### 2.1.0

 * New: DNS Toolbox integration. When the DNS Toolbox connector (dnstoolbox.app)
   is on the site, the console’s site card shows a « Users & logins » summary from
   this plugin — users, administrators, who is online, sign-ins and failed sign-
   ins over a day and a week, the last event — and merges the activity log into 
   the site’s timeline, with IP addresses anonymised and no user agents. Premium
   adds two-factor coverage and the posture score. Nothing new is exposed: the connector
   asks in-process through one filter (`dntc_companions`), on its own signed request,
   and this plugin never sends anything anywhere.

#### 2.0.0

 * New: WordPress 7.1 support. The minimum WordPress version is now 6.6 — every 
   release from 6.6 to 7.1 is exercised by the test suite on each change, so « tested
   up to » is measured rather than asserted.
 * New: saved segments. A filter set you use often can be named and kept — « Dormant
   admins », « Never signed in » — and reopened from a row of buttons above the 
   table. A segment saves the QUESTION rather than a list of people, so whoever 
   matches next month appears in it without anyone touching it. Segments are shared
   with everyone who can open the console, and they record who created them.
 * New: view a customer’s site as they see it. A time-boxed, read-only session —
   fifteen minutes, and while it runs nothing can be bought, submitted or changed,
   so it cannot be used to act on somebody’s behalf by accident. A banner on every
   page names who is viewing and whose account it is, with a one-click exit. You
   can only ever view « downward »: an account holding administrator capabilities
   cannot be viewed as at all. Every session, and every ending, is written to the
   tamper-evident activity log with who, whom and for how long.
 * Changed: the dashboard is reorganised. The twelve filter controls that wrapped
   onto three lines are now one toolbar attached to the table, with the less-reached
   filters behind a « More filters » button that shows how many of them are active—
   so a filter you cannot see can never be quietly in force. What you are filtering
   by is spelled out as removable chips beneath it, alongside your saved views.
 * Changed: the ten summary figures are one strip instead of ten boxes, and the 
   three panels below them are shorter. Same numbers, same click-to-filter behaviour,
   about a third of the height — the user list now starts above the fold on a laptop.
 * New: « Last activity » can be sorted. Accounts that have never been seen stay
   in the list, sorted to the end, rather than disappearing from it.
 * Sortable columns now show a faint arrow at rest, so it is possible to tell which
   headings can be clicked without clicking them. Reported by an administrator who
   read the unsorted columns as unsortable — which, with no marking, was the reasonable
   reading.
 * Changed: the console works on a phone. Every wide table now scrolls inside its
   own card instead of forcing the whole page sideways, headers and filters stack
   rather than wrap into a wall, and touch targets are sized for a thumb. The breakpoint
   is WordPress’s own 782px, so the console folds at the same width the surrounding
   admin does.
 * Fixed: the Role and Status filters drew two borders on top of each other on mobile,
   because the field inside the control was being given the same outline as the 
   control around it.
 * Changed: on a store, the Purchases / Spent / Last order filters moved into « 
   More filters » with the rest of the less-reached ones, and now count towards 
   the number on that button.
 * Fixed: the Email Log wrote a PHP notice on every unfiltered page load, because
   the query was prepared with no values to substitute.

#### 1.9.1

The first update on WordPress.org since 1.0.0, condensing the development releases
in between. What is new compared to 1.0.0:

 * New: Roles. WordPress permissions described the way people think about them —
   a grid of areas (Posts, Pages, Media, Comments, Users, Site settings, Plugins&
   themes) against levels (None, View, Contribute, Manage) instead of sixty raw 
   checkboxes. Custom post types get their own row automatically.
 * Roles is draft-first: every edit collects into a draft, a bar counts the changes,
   and nothing touches the live role until you press Publish. Leaving with a draft
   open prompts you like any unsaved form.
 * Alongside the grid: a Plain English view of the role as toggleable statements,
   side-by-side role comparison with differences highlighted, people management (
   add someone to a role, move people out, reassign between roles), create/duplicate/
   rename/delete, and « Restore WordPress defaults » for the five built-in roles.
 * Capabilities the grid does not manage are never touched — if WooCommerce or a
   membership plugin added something to a role, saving leaves it byte-for-byte. 
   A role the grid cannot describe reads « Custom » and shows the exact difference
   instead of quietly rewriting it on save.
 * Role guardrails are enforced on the server, not merely hidden in the screen: 
   you cannot grant access you do not hold yourself, change your own role, or demote
   the last administrator. The administrator role is visible but not editable. Activation
   changes nothing until you choose to change it.
 * New: an Email Log. Every message WordPress hands to the mail server is recorded—
   recipient, subject, timing, and what the server said back. Nothing is labelled«
   Delivered » or « Sent », because your site cannot observe either: the good state
   is « Handed off », failures carry the server’s error, and results another plugin
   merely claimed are shown as reported rather than observed.
 * You choose which kinds of mail are logged; account mail and the plugin’s own 
   mail are on by default, high-volume kinds are off. Message contents are not stored
   unless you switch it on — and when you do, password reset links, one-time codes
   and application passwords are stripped before anything is written, so the log
   cannot become a way in. Stored contents can be deleted again in one click.
 * New: client IP detection behind Cloudflare, a load balancer or another reverse
   proxy (Cloudflare’s ranges are built in). Forwarding headers are only trusted
   when the request genuinely arrives from a configured range, so they cannot be
   forged.
 * New: the activity log is tamper-evident. Each entry is chained to the one before
   it, so database-level tampering — an edited dump, SQL injection, a rogue database
   user — is detectable, and legitimate retention deletion records itself so it 
   is never mistaken for interference.
 * New: the activity log records which door a sign-in attempt came through — the
   login form, XML-RPC, the REST API or WP-CLI — shown as « Signed in via » in the
   event details.
 * New: each user’s profile panel gains an Emails tab beside Overview, Sessions 
   and Activity; log rows on every screen open a keyboard-accessible side panel;
   every dashboard overview tile drills into its matching filtered view.
 * Fixed: repeat login lockouts now double in length as intended — the record the
   escalation counted from was being deleted the moment a lock expired, so an attacker
   could simply wait out the shortest lockout and go again.
 * Fixed: changing roles from the bulk actions bar, which failed on every site, 
   and bulk-action failures that closed the toolbar without saying why.
 * Performance: the online-users counter, dashboard counts and activity-log totals
   are cached instead of recomputed on every admin page load, session cleanup and
   IP searches are indexed, and the dashboard no longer counts every user account
   per visit.
 * Database schema upgrades from version 1 to 6 run automatically on update; every
   step is additive and existing entries stay readable.

The full release-by-release history is at https://itxuserops.com/changelog/

#### 1.0.0

 * Initial release: unified user dashboard, enable/disable accounts, device-grouped
   session management, activity & login audit log, profile drawer, bulk actions 
   with CSV export, admin-bar online counter, user-overview dashboard widget, and
   native Users-screen integration.

## Meta

 *  Version **2.7.0**
 *  Last updated **3 n wussan ago**
 *  Active installations **10+**
 *  WordPress version ** 6.6 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/itx-userops/)
 * Tags
 * [audit log](https://kab.wordpress.org/plugins/tags/audit-log/)[disable users](https://kab.wordpress.org/plugins/tags/disable-users/)
   [login activity](https://kab.wordpress.org/plugins/tags/login-activity/)[user management](https://kab.wordpress.org/plugins/tags/user-management/)
   [user sessions](https://kab.wordpress.org/plugins/tags/user-sessions/)
 *  [Advanced View](https://kab.wordpress.org/plugins/itx-userops/advanced/)

## Ratings

 5 out of 5 stars.

 *  [  2 5-star reviews     ](https://wordpress.org/support/plugin/itx-userops/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/itx-userops/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/itx-userops/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/itx-userops/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/itx-userops/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/itx-userops/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/itx-userops/reviews/)

## Contributors

 *   [ nanosani ](https://profiles.wordpress.org/nanosani/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/itx-userops/)