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:
2026-04-24 08:34:47 +01:00
committed by GitHub
parent 5a80351d1f
commit 85d55e80fc
4 changed files with 41 additions and 8 deletions
+2 -1
View File
@@ -15,7 +15,8 @@
},
"autoload": {
"psr-4": {
"WPAllStars\\FixPluginDoesNotExistNotices\\": "includes/"
"WPALLSTARS\\FixPluginDoesNotExistNotices\\Admin\\": "admin/lib/",
"WPALLSTARS\\FixPluginDoesNotExistNotices\\": "includes/"
}
}
}
+39 -7
View File
@@ -76,6 +76,7 @@ class Plugin {
$this->plugin_url = plugin_dir_url($plugin_file);
$this->define_constants();
$this->register_autoloader();
$this->load_dependencies();
$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
*
* Loads the Composer autoloader when available (vendor installs). Project
* classes are resolved by the PSR-4 autoloader registered in register_autoloader().
*
* @return void
*/
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';
if (file_exists($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';
}
/**