[wp-trac] [WordPress Trac] #63480: UI refresh inconsistency in plugin deactivation flow (WP 6.8.1)
WordPress Trac
noreply at wordpress.org
Sun May 25 15:01:43 UTC 2025
#63480: UI refresh inconsistency in plugin deactivation flow (WP 6.8.1)
-----------------------------------+---------------------------------
Reporter: shandsadvertising2025 | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Plugins | Version: 6.8
Severity: normal | Resolution:
Keywords: | Focuses: ui, administration
-----------------------------------+---------------------------------
Changes (by SergeyBiryukov):
* focuses: => ui, administration
* component: Administration => Plugins
Old description:
> # WordPress Core Submission: UI Refresh Inconsistency on Plugin
> Deactivation
>
> **Issue:**
> Plugin deactivation completes successfully, but the WordPress Plugins
> admin UI (in `/wp-admin/plugins.php`) sometimes fails to reflect the
> change immediately. This gives the false impression that the plugin is
> still active until the user refreshes the page manually.
>
> ---
>
> ## Steps to Reproduce
>
> 1. Install and activate any minimal plugin (e.g. one that logs
> activation/deactivation, with no UI or output).
> 2. Go to **Plugins > Installed Plugins**.
> 3. Click **Deactivate** on the plugin.
> 4. Observe that:
> - The plugin shows as still “active.”
> - No admin notice or visual confirmation appears.
> - Manually refreshing the page reveals that the plugin has actually
> been deactivated.
>
> ---
>
> ## What Actually Happens
>
> - WordPress deactivates the plugin on the server.
> - Files are unloaded correctly.
> - However, the plugin still appears as active until the admin manually
> reloads the page.
>
> ---
>
> ## What Should Happen
>
> - The plugin row should update visually on deactivation.
> - The admin should see a success message (as is done for activation).
> - No manual refresh should be required.
>
> ---
>
> ## Technical Root Cause
>
> In `wp-admin/plugins.php` (WordPress 6.8.1), the following code
> immediately strips query args used to communicate plugin status:
>
> ```php
> $query_args_to_remove = array(
> 'error', 'deleted', 'activate', 'activate-multi',
> 'deactivate', 'deactivate-multi', ...
> );
> $_SERVER['REQUEST_URI'] = remove_query_arg($query_args_to_remove,
> $_SERVER['REQUEST_URI']);
> ```
>
> If:
> - A JS conflict delays DOM updates, or
> - A slow server stalls table refresh, or
> - An enhancement plugin overrides plugin rows…
>
> …then the deactivation state is not rendered accurately.
>
> ---
>
> ## Suggested Fixes
>
> - Delay removal of deactivation-related query args until **after** the
> plugin table is rendered.
> - Alternatively, introduce a JS-triggered refresh or force UI update of
> the plugin row.
>
> ---
>
> ## Environment
>
> - WordPress 6.8.1 (en_GB)
> - Tested in Chrome, Firefox, Edge
> - No JS console errors
> - Site includes common plugins like ASE, WP Consent API, and Site Kit by
> Google
> - Tested with a custom debug plugin logging lifecycle actions
>
> ---
>
> ## Conclusion
>
> This issue creates a confusing admin experience. Although technically
> harmless, it erodes confidence in plugin lifecycle actions. The issue is
> reproducible and verifiable, and we hope it can be resolved with a minor
> core tweak.
New description:
# WordPress Core Submission: UI Refresh Inconsistency on Plugin
Deactivation
**Issue:**
Plugin deactivation completes successfully, but the WordPress Plugins
admin UI (in `/wp-admin/plugins.php`) sometimes fails to reflect the
change immediately. This gives the false impression that the plugin is
still active until the user refreshes the page manually.
---
## Steps to Reproduce
1. Install and activate any minimal plugin (e.g. one that logs
activation/deactivation, with no UI or output).
2. Go to **Plugins > Installed Plugins**.
3. Click **Deactivate** on the plugin.
4. Observe that:
- The plugin shows as still “active.”
- No admin notice or visual confirmation appears.
- Manually refreshing the page reveals that the plugin has actually
been deactivated.
---
## What Actually Happens
- WordPress deactivates the plugin on the server.
- Files are unloaded correctly.
- However, the plugin still appears as active until the admin manually
reloads the page.
---
## What Should Happen
- The plugin row should update visually on deactivation.
- The admin should see a success message (as is done for activation).
- No manual refresh should be required.
---
## Technical Root Cause
In `wp-admin/plugins.php` (WordPress 6.8.1), the following code
immediately strips query args used to communicate plugin status:
{{{
$query_args_to_remove = array(
'error', 'deleted', 'activate', 'activate-multi',
'deactivate', 'deactivate-multi', ...
);
$_SERVER['REQUEST_URI'] = remove_query_arg($query_args_to_remove,
$_SERVER['REQUEST_URI']);
}}}
If:
- A JS conflict delays DOM updates, or
- A slow server stalls table refresh, or
- An enhancement plugin overrides plugin rows…
…then the deactivation state is not rendered accurately.
---
## Suggested Fixes
- Delay removal of deactivation-related query args until **after** the
plugin table is rendered.
- Alternatively, introduce a JS-triggered refresh or force UI update of
the plugin row.
---
## Environment
- WordPress 6.8.1 (en_GB)
- Tested in Chrome, Firefox, Edge
- No JS console errors
- Site includes common plugins like ASE, WP Consent API, and Site Kit by
Google
- Tested with a custom debug plugin logging lifecycle actions
---
## Conclusion
This issue creates a confusing admin experience. Although technically
harmless, it erodes confidence in plugin lifecycle actions. The issue is
reproducible and verifiable, and we hope it can be resolved with a minor
core tweak.
--
--
Ticket URL: <https://core.trac.wordpress.org/ticket/63480#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list