diff --git a/CHANGELOG.md b/CHANGELOG.md index b19eac4..0960029 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ WordPress 6.4 or newer is now required! +### Added + +* Disable autoloading of plugin options when plugin is deactivated [#160](https://github.com/chesio/bc-security/issues/160). + ### Changed * WordPress 6.4 is required [#159](https://github.com/chesio/bc-security/issues/159). diff --git a/classes/BlueChip/Security/Core/Settings.php b/classes/BlueChip/Security/Core/Settings.php index 416cae4..6a95596 100644 --- a/classes/BlueChip/Security/Core/Settings.php +++ b/classes/BlueChip/Security/Core/Settings.php @@ -188,6 +188,15 @@ public function reset(): bool } + /** + * Set $autoload value of option. + */ + public function setAutoload(bool $autoload): bool + { + return wp_set_option_autoload($this->option_name, $autoload); + } + + /** * Remove the data from database (= hard reset). * diff --git a/classes/BlueChip/Security/Plugin.php b/classes/BlueChip/Security/Plugin.php index 362abfd..383a8f3 100644 --- a/classes/BlueChip/Security/Plugin.php +++ b/classes/BlueChip/Security/Plugin.php @@ -161,9 +161,9 @@ private function init(): void */ public function activate(): void { - // Explicitly persist every setting object, so related option is autoloaded. + // Make sure plugin related options are autoloaded when plugin is active. foreach ($this->settings as $settings) { - $settings->persist(); + $settings->setAutoload(true); } // Install every module that requires it. @@ -196,6 +196,11 @@ public function deactivate(): void $module->deactivate(); } } + + // Make sure plugin related options are *not* autoloaded when plugin is inactive. + foreach ($this->settings as $settings) { + $settings->setAutoload(false); + } }