From 873ca5f272d1acfe09ed186757305ad71e9283b8 Mon Sep 17 00:00:00 2001 From: Marcus Quinn <6428977+marcusquinn@users.noreply.github.com> Date: Sat, 12 Apr 2025 15:06:17 +0100 Subject: [PATCH] Fix critical error when plugin folder is deleted (v1.6.10) --- README.md | 7 +++ fix-plugin-does-not-exist-notices.php | 46 +++++++++++-------- .../fix-plugin-does-not-exist-notices.pot | 2 +- readme.txt | 13 ++++-- 4 files changed, 46 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 17d5555..b461dc0 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,13 @@ The plugin works by: ## Changelog +### 1.6.10 +* Fixed critical error that could occur when a plugin folder is deleted +* Improved error handling with try/catch blocks +* Added more specific checks for the plugins page +* Enhanced compatibility with various WordPress configurations +* Made the code more defensive to prevent potential issues + ### 1.6.9 * Fixed issue with notices not appearing below WordPress error messages * Improved JavaScript detection of WordPress error notices diff --git a/fix-plugin-does-not-exist-notices.php b/fix-plugin-does-not-exist-notices.php index a41ffc4..1413b82 100644 --- a/fix-plugin-does-not-exist-notices.php +++ b/fix-plugin-does-not-exist-notices.php @@ -13,7 +13,7 @@ * Plugin Name: Fix 'Plugin file does not exist.' Notices * Plugin URI: https://wordpress.org/plugins/fix-plugin-does-not-exist-notices/ * Description: Adds missing plugins to the plugins list with a "Remove Reference" link so you can permanently clean up invalid plugin entries and remove error notices. - * Version: 1.6.9 + * Version: 1.6.10 * Author: Marcus Quinn * Author URI: https://www.wpallstars.com * License: GPL-2.0+ @@ -48,7 +48,7 @@ if ( ! defined( 'ABSPATH' ) ) { } // Define plugin constants -define( 'FPDEN_VERSION', '1.6.9' ); +define( 'FPDEN_VERSION', '1.6.10' ); define( 'FPDEN_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'FPDEN_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); define( 'FPDEN_PLUGIN_FILE', __FILE__ ); @@ -396,34 +396,44 @@ class Fix_Plugin_Does_Not_Exist_Notices { } /** - * Prevent WordPress from automatically deactivating missing plugins. + * Safely prevent WordPress from automatically deactivating missing plugins. * * WordPress normally deactivates plugins that don't exist and adds them to the - * 'recently_activated' option. This filter prevents that behavior so we can - * handle the deactivation ourselves through our UI. + * 'recently_activated' option. This filter modifies that behavior so we can + * handle the deactivation ourselves through our UI, but only on the plugins page. * * @param mixed $pre_option The value to return instead of the option value. * @return mixed The original value (null) to let WordPress proceed, or an array to override. */ public function prevent_auto_deactivation( $pre_option ) { - // Only run on the plugins page - if ( ! $this->is_plugins_page() ) { + // Safety check - if we're not in admin or if this isn't the plugins page, don't interfere + if ( ! is_admin() || ! function_exists( 'get_current_screen' ) ) { return $pre_option; } - // Get our invalid plugins - $invalid_plugins = $this->get_invalid_plugins(); - - // If we have invalid plugins and we're on the plugins page, return an empty array - // to prevent WordPress from auto-deactivating the plugins - if ( ! empty( $invalid_plugins ) ) { - // Return the current value of the option to prevent WordPress from modifying it - $recently_activated = get_option( 'recently_activated', array() ); - return $recently_activated; + // Get current screen - only proceed if we're on the plugins page + $screen = get_current_screen(); + if ( ! $screen || 'plugins' !== $screen->base ) { + return $pre_option; } - // Otherwise, let WordPress handle it normally - return $pre_option; + // Only apply our logic if we're on an admin page and specifically the plugins.php page + global $pagenow; + if ( 'plugins.php' !== $pagenow ) { + return $pre_option; + } + + // We're on the plugins page, so let's try to preserve the current state + try { + // Get the current value of recently_activated + $recently_activated = get_option( 'recently_activated', array() ); + + // Return the current value to prevent WordPress from modifying it + return $recently_activated; + } catch ( Exception $e ) { + // If anything goes wrong, let WordPress handle it normally + return $pre_option; + } } } // End class Fix_Plugin_Does_Not_Exist_Notices diff --git a/languages/fix-plugin-does-not-exist-notices.pot b/languages/fix-plugin-does-not-exist-notices.pot index ff6a037..346d0bf 100644 --- a/languages/fix-plugin-does-not-exist-notices.pot +++ b/languages/fix-plugin-does-not-exist-notices.pot @@ -2,7 +2,7 @@ # This file is distributed under the GPL-2.0+. msgid "" msgstr "" -"Project-Id-Version: Fix 'Plugin file does not exist.' Notices 1.6.9\n" +"Project-Id-Version: Fix 'Plugin file does not exist.' Notices 1.6.10\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/fix-plugin-does-not-exist-notices\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/readme.txt b/readme.txt index b8c1f4e..d2cf47b 100644 --- a/readme.txt +++ b/readme.txt @@ -5,7 +5,7 @@ Tags: plugins, missing plugins, cleanup, error fix, admin tools, plugin file doe Requires at least: 5.0 Tested up to: 6.4 Requires PHP: 7.0 -Stable tag: 1.6.9 +Stable tag: 1.6.10 License: GPL-2.0+ License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -89,6 +89,13 @@ Although this plugin consumes minimal disk space, and doesn't run unless you are == Changelog == += 1.6.10 = +* Fixed critical error that could occur when a plugin folder is deleted +* Improved error handling with try/catch blocks +* Added more specific checks for the plugins page +* Enhanced compatibility with various WordPress configurations +* Made the code more defensive to prevent potential issues + = 1.6.9 = * Fixed issue with notices not appearing below WordPress error messages * Improved JavaScript detection of WordPress error notices @@ -234,8 +241,8 @@ Although this plugin consumes minimal disk space, and doesn't run unless you are == Upgrade Notice == -= 1.6.9 = -Fixed critical issue with WordPress automatically clearing error notices on page refresh and improved notice positioning! += 1.6.10 = +CRITICAL FIX: Resolves an issue that could cause a fatal error when a plugin folder is deleted. Upgrade immediately if you're experiencing the "critical error" message. = 1.6.3 = Fixed Git Updater repository URLs and updated organization naming for consistent branding across all platforms!