register(); ( new PostTypes\Player() )->register(); ( new Jobs\Metadata_Poll() )->register(); ( new Api\Routes() )->register(); ( new Frontend\Assets() )->register(); ( new Frontend\Shortcode() )->register(); ( new Frontend\Block() )->register(); ( new Frontend\Preview() )->register(); if ( is_admin() ) { ( new Admin\Menu() )->register(); } // Feature modules: every class in includes/Modules/ with a register() method boots here. // Add-ons extend the list with `streamsera_modules`. foreach ( $this->modules() as $module ) { if ( class_exists( $module ) && method_exists( $module, 'register' ) ) { ( new $module() )->register(); } } /** * Fires once StreamSera has registered its modules. Add-ons hook in here. * * @param Plugin $plugin Plugin instance. */ do_action( 'streamsera_loaded', $this ); } /** * Discover feature modules. * * @return string[] Fully qualified class names. */ public function modules() { $modules = array(); foreach ( (array) glob( STREAMSERA_PATH . 'includes/Modules/*.php' ) as $file ) { $name = basename( $file, '.php' ); if ( 'index' === $name ) { continue; } $modules[] = 'StreamSera\\Modules\\' . $name; } sort( $modules ); /** * Filter the list of feature modules to boot. * * @param string[] $modules Class names. */ return (array) apply_filters( 'streamsera_modules', $modules ); } /** * Activation: register types, flush rewrites, seed defaults. */ public static function activate( $network_wide = false ) { Installation::activate(); Admin\Menu::queue_activation_redirect( 'core', (bool) $network_wide ); } /** * Deactivation. */ public static function deactivate() { Installation::deactivate(); } }