Title: TroubleLens – Conflict Detector
Author: Som Shrestha
Published: <strong>September 22, 2026</strong>
Last modified: September 22, 2026

---

Search plugins

![](https://ps.w.org/troublelens-conflict-detector/assets/banner-772x250.png?rev
=3707417)

![](https://ps.w.org/troublelens-conflict-detector/assets/icon-256x256.png?rev=3707423)

# TroubleLens – Conflict Detector

 By [Som Shrestha](https://profiles.wordpress.org/som9663/)

[Download](https://downloads.wordpress.org/plugin/troublelens-conflict-detector.1.0.1.zip)

 * [Details](https://wordpress.org/plugins/troublelens-conflict-detector/#description)
 * [Reviews](https://wordpress.org/plugins/troublelens-conflict-detector/#reviews)
 *  [Installation](https://wordpress.org/plugins/troublelens-conflict-detector/#installation)
 * [Development](https://wordpress.org/plugins/troublelens-conflict-detector/#developers)

 [Support](https://wordpress.org/support/plugin/troublelens-conflict-detector/)

## Description

The usual way to find a plugin conflict is to deactivate plugins one at a time and
see what changes. On a live site that means taking features away from real visitors
and customers while you experiment.

TroubleLens does the same investigation without that cost. It gives you a private
troubleshooting session: plugins you switch off stop loading **for your requests
only**. Everyone else — visitors, customers, other administrators, search engines,
scheduled tasks — continues to get the site exactly as it is. The list of active
plugins in your database is never changed.

#### How it works

Starting a session writes one small must-use plugin and sets a cookie in your browser.
On requests carrying that cookie, WordPress is told a different list of active plugins.
That is the only supported way to do this: the plugin list is read before any normal
plugin has loaded, so the code doing the filtering has to already be running.

#### What it does

 * **Troubleshooting mode.** Switch any active plugin off for yourself. Nothing 
   is deactivated.
 * **Theme test.** Render your own session with a bundled default theme while visitors
   keep the live one.
 * **Guided isolation.** Answer “is the problem still there?” a handful of times
   and the plugin narrows twenty candidates down to one by halves, then confirms
   it by switching that one off and on again.
 * **Diagnostics.** REST API, WP-Cron and read-only database checks, plus errors
   read from the WordPress debug log and grouped by the component they were recorded
   in.
 * **WooCommerce checks.** Version, required pages, HTTPS, template overrides that
   have fallen behind, and the scheduled action queue. Only appears when WooCommerce
   is running.
 * **Support report.** Everything gathered, in text or JSON, with credentials and
   personal data stripped out.
 * **Automatic isolation.** Describe how to tell the problem apart once and the 
   whole search runs itself, fetching the page through your session after each round.
 * **JavaScript errors.** Recorded in your browser during a session and attributed
   to a plugin or theme. These never reach the PHP debug log.
 * **Duplicate libraries.** Two copies of jQuery or Select2 on one page, named with
   both loaders. Found without reproducing anything.
 * **Where plugins meet.** Hooks with callbacks from more than one plugin, and which
   plugins detach other people’s callbacks.
 * **Load cost.** What each plugin adds to a page, measured by switching it off 
   for your session and reloading.
 * **What changed.** Real version numbers recorded when WordPress updates something,
   so “it worked yesterday” has an answer.

#### What it will not do

This is a diagnostic tool, so it does not change things it is measuring:

 * It never writes to the `active_plugins` option, and it prevents anything else
   from writing it while a session is running.
 * It never switches your real theme.
 * It never deletes, optimises or repairs anything in the database, and never clears
   a transient or a scheduled event.
 * It never writes to `wp-config.php`, including to enable `WP_DEBUG`.
 * It never installs its own PHP error handler. It reads what WordPress already 
   records, and states plainly what that misses.
 * It never reports a plugin as the cause of anything. It reports what was observed,
   with the observations attached, and says “strong candidate” where that is what
   the evidence supports.

#### Privacy

TroubleLens has no telemetry, no tracking and no advertising, and contacts no third
party service. The HTTP requests it makes go to your own site and nowhere else: 
to your REST API, to check that it answers, and to your own pages, to time them 
or to see whether a symptom is still there.

There are exactly two exceptions, and each only happens when you press the button
that causes it.

The outgoing mail check sends a single message to the email address on your own 
account, so that a site whose mail is broken finds out before its customers do. 
It carries nothing about your site beyond its name.

The core file check asks WordPress.org for the list of checksums published for your
exact version, and compares the files here against it. All it sends is the version
and language needed to identify which list to return. Your own themes, plugins and
uploads are never checked, because nobody publishes checksums for those.

Support reports are built and rendered on your server. Nothing is transmitted anywhere;
you copy or download the report and send it yourself. Before it is shown to you,
passwords, salts, authentication keys, tokens, API keys and payment gateway credentials
are removed, email addresses are replaced, and absolute server paths are made relative.

## Screenshots

[⌊The overview: environment, what is running, and what has changed recently.⌉⌊The
overview: environment, what is running, and what has changed recently.⌉[

The overview: environment, what is running, and what has changed recently.

[⌊Troubleshooting mode, with a per-plugin switch that applies to your session alone.⌉⌊
Troubleshooting mode, with a per-plugin switch that applies to your session alone
.⌉[

Troubleshooting mode, with a per-plugin switch that applies to your session alone.

[⌊Guided isolation narrowing the candidates down by halves.⌉⌊Guided isolation narrowing
the candidates down by halves.⌉[

Guided isolation narrowing the candidates down by halves.

[⌊Diagnostics: REST API, WP-Cron, database, server settings, duplicate libraries
and errors from the debug log.⌉⌊Diagnostics: REST API, WP-Cron, database, server
settings, duplicate libraries and errors from the debug log.⌉[

Diagnostics: REST API, WP-Cron, database, server settings, duplicate libraries and
errors from the debug log.

[⌊The support report, with credentials and personal data already removed.⌉⌊The support
report, with credentials and personal data already removed.⌉[

The support report, with credentials and personal data already removed.

## Installation

 1. Upload the plugin through **Plugins  Add Plugin  Upload Plugin**, or install it
    from the plugin directory.
 2. Activate it.
 3. Open **TroubleLens** in the admin menu.

Activation writes nothing beyond a version marker. The must-use file that makes 
troubleshooting sessions work is only written when you start your first session,
and is removed again when you deactivate the plugin.

## FAQ

### Will my visitors notice anything?

No. A troubleshooting session applies to requests that carry your session cookie.
Every other request — every visitor, bot, cron run and other logged-in user — loads
the site normally.

### Can I break my site with this?

The session only affects you, so a mistake stays with you. If you switch off something
your admin screens need, the recovery link on the troubleshooting screen ends the
session before any plugin loads, so it works even when the site is returning a fatal
error.

### How do I get out if everything is broken?

In order of how little needs to be working: use the recovery link shown on the troubleshooting
screen; clear this site’s cookies in your browser; wait for the session to expire;
add `define( 'TROUBLELENS_DISABLE', true );` to `wp-config.php`; or delete `wp-content/
mu-plugins/troublelens-conflict-detector-loader.php`. Deactivating the plugin does
the last two for you.

### Can I browse the site logged out while a session is running?

No. The session is tied to your user account, and a request that is not you ends
it. This is deliberate: it is what stops a leaked cookie applying to anybody else.

### Why can’t I switch off a must-use plugin?

Must-use plugins load before any code that could filter them, including this one.
The same is true of drop-ins like `object-cache.php`. The overview screen lists 
them so you know what is outside the test.

### Why did switching off one plugin switch off others?

Because they declare that they require it. WordPress deactivates dependents when
a dependency goes, and a session does the same, or those plugins would be running
against something that is not there — producing an error that looks exactly like
the conflict you are hunting. The screen tells you which ones went and why.

### Why can’t I deactivate a plugin while a session is running?

You can deactivate a plugin you have not hidden. What is blocked is a plugin deactivating
_itself_, which many do when a dependency is missing. Without that block, hiding
WooCommerce for your own session would make its extensions switch themselves off
for every visitor.

### Does it work on multisite?

On multisite, only network administrators can start a session, and only the current
site’s own active plugins can be switched off. Network-activated plugins are listed
and flagged but cannot be toggled.

### Where do the error reports come from?

From the WordPress debug log, when `WP_DEBUG_LOG` is enabled, and from the extensions
WordPress itself paused after catching a fatal error. The plugin will not enable
debugging for you, because that means editing `wp-config.php`. The diagnostics screen
lists exactly what this approach cannot see.

### Built to be extended

The screens, the diagnostics, the findings and the report are all open to a plugin
that wants to add to them, through documented filters and actions with tests that
prove each one fires. Whatever an add-on contributes to a report is redacted along
with everything else, and a finding it adds carries the observations behind it like
any other. See docs/EXTENDING.md in the plugin folder.

### Credits

The icons and the two illustrations in this plugin were generated with AI rather
than taken from an icon set, so nothing here carries a third party licence. They
are distributed under the same GPLv2 or later as the rest of the plugin.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“TroubleLens – Conflict Detector” is open source software. The following people 
have contributed to this plugin.

Contributors

 *   [ Som Shrestha ](https://profiles.wordpress.org/som9663/)

[Translate “TroubleLens – Conflict Detector” into your language.](https://translate.wordpress.org/projects/wp-plugins/troublelens-conflict-detector)

### Interested in development?

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

## Changelog

#### 1.0.1

Changes made during the WordPress.org review, before the first public release.

 * Renamed to TroubleLens. The previous name was close enough to an existing project’s
   terminology to be a problem, and the reviewer asked for a distinctive one.
 * A fatal error during your session is now recorded and reported. Previously a 
   request that died took the screen with it and left nothing to read, which is 
   the situation people most often open this plugin for.
 * Added a How to use section: the four steps, what each other section is for, and
   what a clean result does not prove.
 * Every value read from a request is now sanitized where it is read.

#### 1.0.0

First release.

Troubleshooting:

 * Per-administrator troubleshooting sessions that never alter the active plugin
   list. Visitors, customers, other administrators, search engines and scheduled
   tasks all continue to see the site as it is.
 * Dependency-aware switching, so hiding a plugin also hides whatever requires it.
 * Protection against anything persisting the filtered plugin list, including plugins
   that deactivate themselves when a dependency is missing.
 * Theme testing against a bundled default theme, for your session only.
 * Session options: bypass the page cache, keep the admin bar on the front end, 
   and log what the session switches off.
 * The Plugins screen stops offering an Activate link for a plugin your session 
   is hiding.

Finding the cause:

 * Guided isolation by binary search, with a three-step confirmation round.
 * Automatic isolation: describe the symptom once and the search runs itself, with
   no questions to answer.
 * Evidence bands rather than invented percentages, always shown with the observations
   behind them.
 * JavaScript error capture during a session, attributed to the plugin or theme 
   whose file threw.
 * Duplicate library detection: finds two copies of jQuery, Select2 and similar 
   on one page, and names both loaders.
 * Hook inspection: which plugins share a hook, and which ones call remove_action
   on callbacks they do not own.
 * Per-plugin load cost, measured by difference and reported with a noise floor 
   rather than as false precision.
 * Update guard: records real plugin versions when WordPress updates something, 
   rather than guessing from file dates.

Diagnostics:

 * REST API, WP-Cron and read-only database checks.
 * Environment checks: memory, execution time, upload limits, form field limits,
   PHP extensions, permalinks, character set, caching, and whether the folders this
   plugin needs are writable.
 * PHP errors read from the debug log and from core’s paused extensions, grouped
   by component.
 * Outgoing HTTP requests recorded during a session, with the host, how long each
   took and which plugin asked. A plugin waiting on somebody else’s server shows
   up nowhere else.
 * A core file check, on a button. Compares the WordPress files here against the
   checksums WordPress.org published for your exact version, which is the one thing
   that explains behaviour surviving every plugin being switched off.
 * An outgoing mail check, on a button. It sends one message to your own address
   and reports what WordPress said about it. This is the only thing in the plugin
   that leaves the site, and it never happens on its own.
 * Optional WooCommerce checks: pages, HTTPS, template overrides and the scheduled
   action queue.

Reporting:

 * Support report in text and JSON, sanitised of credentials, personal data and 
   server paths.

## Meta

 *  Version **1.0.1**
 *  Last updated **8 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [conflict](https://wordpress.org/plugins/tags/conflict/)[debug](https://wordpress.org/plugins/tags/debug/)
   [diagnostics](https://wordpress.org/plugins/tags/diagnostics/)[site health](https://wordpress.org/plugins/tags/site-health/)
   [troubleshooting](https://wordpress.org/plugins/tags/troubleshooting/)
 *  [Advanced View](https://wordpress.org/plugins/troublelens-conflict-detector/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/troublelens-conflict-detector/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/troublelens-conflict-detector/reviews/)

## Contributors

 *   [ Som Shrestha ](https://profiles.wordpress.org/som9663/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/troublelens-conflict-detector/)