feat: implement PSR-4 autoloader, remove manual require_once calls (#27)
- Add spl_autoload_register in Plugin::register_autoloader() mapping WPALLSTARS\FixPluginDoesNotExistNotices\Admin\ to admin/lib/ and WPALLSTARS\FixPluginDoesNotExistNotices\ to includes/ - Remove manual require_once calls for Core, Admin, and Modal classes - Rename admin/lib/admin.php -> Admin.php and modal.php -> Modal.php for PSR-4 filename convention (class name must match file name) - Fix composer.json: correct namespace case (WPAllStars -> WPALLSTARS) and add admin/lib/ directory mapping for Admin sub-namespace - Fix wp-fix-plugin-does-not-exist-notices.php require_once to use correct case (plugin.php -> Plugin.php) Resolves #25
This commit is contained in:
+2
-1
@@ -15,7 +15,8 @@
|
|||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"WPAllStars\\FixPluginDoesNotExistNotices\\": "includes/"
|
"WPALLSTARS\\FixPluginDoesNotExistNotices\\Admin\\": "admin/lib/",
|
||||||
|
"WPALLSTARS\\FixPluginDoesNotExistNotices\\": "includes/"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+39
-7
@@ -76,6 +76,7 @@ class Plugin {
|
|||||||
$this->plugin_url = plugin_dir_url($plugin_file);
|
$this->plugin_url = plugin_dir_url($plugin_file);
|
||||||
|
|
||||||
$this->define_constants();
|
$this->define_constants();
|
||||||
|
$this->register_autoloader();
|
||||||
$this->load_dependencies();
|
$this->load_dependencies();
|
||||||
$this->init_components();
|
$this->init_components();
|
||||||
}
|
}
|
||||||
@@ -97,23 +98,54 @@ class Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register the PSR-4 autoloader
|
||||||
|
*
|
||||||
|
* Maps plugin namespaces to their corresponding directories so that
|
||||||
|
* new class files are loaded automatically without manual require_once calls.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function register_autoloader() {
|
||||||
|
$plugin_dir = $this->plugin_dir;
|
||||||
|
|
||||||
|
spl_autoload_register(function ($class) use ($plugin_dir) {
|
||||||
|
// Ordered most-specific prefix first so Admin\ resolves before the root namespace.
|
||||||
|
$namespace_map = array(
|
||||||
|
'WPALLSTARS\\FixPluginDoesNotExistNotices\\Admin\\' => $plugin_dir . 'admin/lib/',
|
||||||
|
'WPALLSTARS\\FixPluginDoesNotExistNotices\\' => $plugin_dir . 'includes/',
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($namespace_map as $prefix => $base_dir) {
|
||||||
|
if (strncmp($prefix, $class, strlen($prefix)) !== 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$relative_class = substr($class, strlen($prefix));
|
||||||
|
$file = $base_dir . str_replace('\\', DIRECTORY_SEPARATOR, $relative_class) . '.php';
|
||||||
|
|
||||||
|
if (file_exists($file)) {
|
||||||
|
require_once $file;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load dependencies
|
* Load dependencies
|
||||||
*
|
*
|
||||||
|
* Loads the Composer autoloader when available (vendor installs). Project
|
||||||
|
* classes are resolved by the PSR-4 autoloader registered in register_autoloader().
|
||||||
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
private function load_dependencies() {
|
private function load_dependencies() {
|
||||||
// Load composer autoloader if it exists
|
// Load composer autoloader if it exists (vendor/ directory present).
|
||||||
$autoloader = $this->plugin_dir . 'vendor/autoload.php';
|
$autoloader = $this->plugin_dir . 'vendor/autoload.php';
|
||||||
if (file_exists($autoloader)) {
|
if (file_exists($autoloader)) {
|
||||||
require_once $autoloader;
|
require_once $autoloader;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load required files
|
|
||||||
require_once $this->plugin_dir . 'includes/Core.php';
|
|
||||||
require_once $this->plugin_dir . 'includes/Updater.php';
|
|
||||||
require_once $this->plugin_dir . 'admin/lib/admin.php';
|
|
||||||
require_once $this->plugin_dir . 'admin/lib/modal.php';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user