arts / base
Framework-agnostic base classes for Arts WordPress plugins
v1.1.0
2026-04-07 08:05 UTC
Requires
- php: >=8.0
Requires (Dev)
README
Base classes for WordPress plugins using a manager pattern architecture.
Installation
composer require arts/base
Quick Start
use Arts\Base\Plugins\BasePlugin; use Arts\Base\Managers\BaseManager; class MyPlugin extends BasePlugin { protected function get_default_config() { return ['version' => '1.0.0']; } protected function get_default_strings() { return ['name' => 'My Plugin']; } protected function get_managers_classes() { return ['assets' => AssetsManager::class]; } protected function get_default_run_action() { return 'init'; } } class AssetsManager extends BaseManager { // Access config via $this->config, strings via $this->strings // Access other managers via $this->managers->other_manager } // Initialize MyPlugin::instance();
Architecture
- BasePlugin - Per-class singleton. Constructor bootstraps the plugin (init properties, apply filters, instantiate and init managers, register
run()), thenrun()fires on the configured WordPress action. - BaseManager - Receives
$args,$config,$stringsfrom the plugin at construction; peer managers are wired in later viainit($managers)(self excluded). - ManagersContainer -
ArrayObjectsubclass supporting both iteration and property access ($managers->some_manager); missing keys returnnull.
Manager Communication
Peers are wired into $this->managers at the end of BaseManager::init(), after init_properties() runs. So $this->managers is null inside init_properties(), and only reachable from methods called after init() completes:
$this->managers->assets->enqueue_scripts();
Type Safety
For IDE autocompletion, extend ManagersContainer and override init_managers_container() in your plugin. See @template TManagers in BasePlugin.
Used By
- Release Deploy for EDD - GitHub release → Easy Digital Downloads automation