'keyword_research', * 'name' => 'Keyword Research', * 'description' => 'Find keyword opportunities', * 'version' => '1.0', * 'class' => 'ShadowSync_SEO_Keyword_Research', * ]); */ class ShadowSync_SEO_Module_Registry { private static $modules = []; private static $active = []; /** * Register a module */ public static function register($config) { $required = ['id', 'name', 'class']; foreach ($required as $key) { if (empty($config[$key])) { return new WP_Error('missing_key', 'Module registration missing: ' . $key); } } $defaults = [ 'description' => '', 'version' => '1.0', 'active' => true, 'icon' => '🔧', 'menu_slug' => null, ]; self::$modules[$config['id']] = array_merge($defaults, $config); return true; } /** * Get all registered modules */ public static function get_all() { return self::$modules; } /** * Get a single module by ID */ public static function get($id) { return self::$modules[$id] ?? null; } /** * Check if a module is registered */ public static function exists($id) { return isset(self::$modules[$id]); } /** * Initialise all registered modules */ public static function init_all() { foreach (self::$modules as $id => $module) { if (!$module['active']) continue; if (class_exists($module['class'])) { new $module['class'](); self::$active[$id] = true; } } } /** * Get count of active modules */ public static function count_active() { return count(self::$active); } }