Fix button not appearing in some WP admin themes (v1.2.3)

This commit is contained in:
2025-04-09 23:56:47 +01:00
parent f200ff6f96
commit d659c00e25
4 changed files with 58 additions and 7 deletions

View File

@ -2,6 +2,15 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## [1.2.3] - 2023-10-05
### Fixed
- Button not appearing in some WordPress admin themes
- Error message detection for greater theme compatibility
### Improved
- DOM traversal to find notification elements in various themes
- Added console logging for troubleshooting
## [1.2.2] - 2023-10-05 ## [1.2.2] - 2023-10-05
### Fixed ### Fixed
- Timeout issue during plugin activation - Timeout issue during plugin activation

View File

@ -1,7 +1,7 @@
# Plugin Reference Cleaner # Plugin Reference Cleaner
Author: Marcus Quinn Author: Marcus Quinn
Author URI: https://www.wpallstars.com Author URI: https://www.wpallstars.com
Version: 1.2.2 Version: 1.2.3
License: GPL-2.0+ License: GPL-2.0+
## Description ## Description
@ -47,6 +47,11 @@ If you don't have this notification perpetually showing on your /wp-admin/plugin
## Changelog ## Changelog
### 1.2.3
* Fixed button not appearing in some WordPress admin themes
* Improved error message detection for greater compatibility
* Enhanced DOM traversal to find notification elements
### 1.2.2 ### 1.2.2
* Fixed timeout issue during plugin activation * Fixed timeout issue during plugin activation
* Improved hook management to prevent potential infinite recursion * Improved hook management to prevent potential infinite recursion

View File

@ -2,7 +2,7 @@
/* /*
* Plugin Name: Plugin Reference Cleaner * Plugin Name: Plugin Reference Cleaner
* Description: Adds a "Remove Reference" button to plugin deactivation error notices, allowing users to clean up invalid plugin entries. * Description: Adds a "Remove Reference" button to plugin deactivation error notices, allowing users to clean up invalid plugin entries.
* Version: 1.2.2 * Version: 1.2.3
* Author: Marcus Quinn * Author: Marcus Quinn
* Author URI: https://www.wpallstars.com * Author URI: https://www.wpallstars.com
* License: GPL-2.0+ * License: GPL-2.0+
@ -37,8 +37,10 @@ class Plugin_Reference_Cleaner {
if (!empty($notices)) { if (!empty($notices)) {
foreach ($notices as $notice) { foreach ($notices as $notice) {
if (strpos($notice, 'has been deactivated due to an error: Plugin file does not exist') !== false) { // Look for both variations of the error message
// Extract plugin file from notice if (strpos($notice, 'has been deactivated due to an error: Plugin file does not exist') !== false ||
strpos($notice, 'deactivated due to an error: Plugin file does not exist') !== false) {
// Extract plugin file from notice using various patterns
if (preg_match('/The plugin ([^ ]+)/', $notice, $match)) { if (preg_match('/The plugin ([^ ]+)/', $notice, $match)) {
$plugin_files[] = $match[1]; $plugin_files[] = $match[1];
$has_error_notice = true; $has_error_notice = true;
@ -57,21 +59,51 @@ class Plugin_Reference_Cleaner {
<script type="text/javascript"> <script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
var pluginFiles = <?php echo wp_json_encode($plugin_files); ?>; var pluginFiles = <?php echo wp_json_encode($plugin_files); ?>;
var notices = document.querySelectorAll('.notice-error p');
// Try multiple selectors to find error notices
var notices = document.querySelectorAll('.notice-error p, .error p, .notice p, .updated p, .update-nag p');
if (notices.length === 0) { if (notices.length === 0) {
// If no p elements found, try the parent elements
notices = document.querySelectorAll('.notice-error, .error, .notice, .updated, .update-nag');
}
if (notices.length === 0) {
// Try a more generic approach - find any element containing the error text
var allElements = document.querySelectorAll('*');
var errorNotices = [];
for (var i = 0; i < allElements.length; i++) {
var el = allElements[i];
if (el.childNodes.length === 1 && el.childNodes[0].nodeType === 3) { // Text node
if (el.textContent.includes('has been deactivated due to an error: Plugin file does not exist') ||
el.textContent.includes('deactivated due to an error: Plugin file does not exist')) {
errorNotices.push(el);
}
}
}
if (errorNotices.length > 0) {
notices = errorNotices;
}
}
if (notices.length === 0) {
console.log('Plugin Reference Cleaner: No notice elements found');
return; return;
} }
notices.forEach(function(notice) { notices.forEach(function(notice) {
pluginFiles.forEach(function(pluginFile) { pluginFiles.forEach(function(pluginFile) {
if (notice.textContent.includes('The plugin ' + pluginFile)) { if (notice.textContent.includes(pluginFile) ||
notice.textContent.includes('Plugin file does not exist')) {
var button = document.createElement('button'); var button = document.createElement('button');
button.textContent = 'Remove Reference'; button.textContent = 'Remove Reference';
button.className = 'button button-secondary remove-plugin-ref'; button.className = 'button button-secondary remove-plugin-ref';
button.dataset.plugin = pluginFile; button.dataset.plugin = pluginFile;
button.style.marginLeft = '10px'; button.style.marginLeft = '10px';
notice.appendChild(button); notice.appendChild(button);
console.log('Plugin Reference Cleaner: Added button for ' + pluginFile);
} }
}); });
}); });

View File

@ -1,7 +1,7 @@
=== Plugin Reference Cleaner === === Plugin Reference Cleaner ===
Author: Marcus Quinn Author: Marcus Quinn
Author URI: https://www.wpallstars.com Author URI: https://www.wpallstars.com
Version: 1.2.2 Version: 1.2.3
License: GPL-2.0+ License: GPL-2.0+
== Description == == Description ==
@ -47,6 +47,11 @@ If you don't have this notification perpetually showing on your /wp-admin/plugin
== Changelog == == Changelog ==
= 1.2.3 =
* Fixed button not appearing in some WordPress admin themes
* Improved error message detection for greater compatibility
* Enhanced DOM traversal to find notification elements
= 1.2.2 = = 1.2.2 =
* Fixed timeout issue during plugin activation * Fixed timeout issue during plugin activation
* Improved hook management to prevent potential infinite recursion * Improved hook management to prevent potential infinite recursion