repository = new ComponentsRepository(); $this->customizer = new Customizer( $this ); $this->assets_manager = new AssetsManager( $this ); $this->plugins_manager = new PluginsManager( $this ); add_action( 'after_setup_theme', array( $this, 'afterSetup' ), 20 ); } public static function slug() { return str_replace( '_', '-', self::$slug ); } public static function prefix( $str, $theme = true ) { static::$slug = str_replace( '-', '_', get_template() ); $slug = static::$slug ? static::$slug : 'colibriwp'; return $slug . ( $theme ? '_theme_' : '_' ) . $str; } public static function resolveTemplateRelativePath( $rel ) { return trailingslashit( static::$theme_root_relative_path ) . $rel; } public static function resolveThemeBaseTemplateRelativePath( $rel ) { return trailingslashit( static::$theme_base_relative_path ) . $rel; } public static function load( $data ) { static::$theme_base_relative_path = $data['themeBaseRelativePath']; static::$theme_root_relative_path = $data['themeRelativePath']; Hooks::prefixed_add_filter( 'components', array( __CLASS__, 'registerDefaultComponents' ) ); static::getInstance(); } /** * @return null|Theme */ public static function getInstance() { if ( ! static::$instance ) { static::$instance = new static(); Hooks::prefixed_do_action( 'theme_loaded', static::$instance ); } return static::$instance; } public static function rootDirectory() { return get_template_directory() . '/' . static::$theme_root_relative_path; } public static function rootDirectoryUri() { return get_template_directory_uri() . '/' . static::$theme_root_relative_path; } public static function registerDefaultComponents( $components = array() ) { $namespace = 'ColibriWP\\Theme\\Components'; $components = array_merge( $components, array( // header components 'header' => "{$namespace}\\Header", 'logo' => "{$namespace}\\Header\\Logo", 'header-menu' => "{$namespace}\\Header\\HeaderMenu", // inner page fragments 'inner-nav-bar' => "{$namespace}\\InnerHeader\\NavBar", 'inner-top-bar' => "{$namespace}\\InnerHeader\\TopBar", 'inner-hero' => "{$namespace}\\InnerHeader\\Hero", 'inner-title' => "{$namespace}\\InnerHeader\\Title", // front page fragments 'front-hero' => "{$namespace}\\FrontHeader\\Hero", 'front-title' => "{$namespace}\\FrontHeader\\Title", 'front-subtitle' => "{$namespace}\\FrontHeader\\Subtitle", 'front-buttons' => "{$namespace}\\FrontHeader\\ButtonsGroup", 'top-bar-list-icons' => "{$namespace}\\FrontHeader\\TopBarListIcons", 'top-bar-social-icons' => "{$namespace}\\FrontHeader\\TopBarSocialIcons", 'front-nav-bar' => "{$namespace}\\FrontHeader\\NavBar", 'front-top-bar' => "{$namespace}\\FrontHeader\\TopBar", 'front-image' => "{$namespace}\\FrontHeader\\Image", // footer components 'footer' => "{$namespace}\\Footer", 'front-footer' => "{$namespace}\\Footer\\FrontFooter", // general components 'css' => "{$namespace}\\CSSOutput", // page content 'main' => "{$namespace}\\MainContent", 'single' => "{$namespace}\\SingleContent", 'content' => "{$namespace}\\PageContent", 'front-page-content' => "{$namespace}\\FrontPageContent", 'search' => "{$namespace}\\PageSearch", 'page-not-found' => "{$namespace}\\PageNotFound", // inner content fragments // main content 'main-loop' => "{$namespace}\\MainContent\ArchiveLoop", 'post-loop' => "{$namespace}\\MainContent\PostLoop", 'archive-loop' => "{$namespace}\\MainContent\ArchiveLoop", 'single-template' => "{$namespace}\\MainContent\SingleItemTemplate", // sidebar 'sidebar' => "{$namespace}\\Sidebar", // woo 'main-woo' => "{$namespace}\\WooContent", ) ); return $components; } public static function default_components( $components ) { } public function afterSetup() { Defaults::load(); Translations::load(); ThemeTranslations::load(); $this->registerMenus(); $this->repository->load(); $this->customizer->boot(); $this->assets_manager->boot(); $this->plugins_manager->boot(); add_action( 'admin_menu', array( $this, 'addThemeInfoPage' ) ); add_action( 'admin_notices', array( $this, 'addThemeNotice' ) ); add_action( 'wp_ajax_colibriwp_disable_big_notice', function () { check_ajax_referer( 'kubio_disable_big_notice_nonce', 'nonce' ); $slug = get_template() . '-page-info'; update_option( "{$slug}-theme-notice-dismissed", true ); } ); add_filter( 'language_attributes', array( $this, 'languageAttributes' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueueAdminScripts' ), 0 ); } private function registerMenus() { register_nav_menus( $this->registered_menus ); } public function languageAttributes( $output ) { if ( apply_filters( 'kubio_is_enabled', false ) ) { return $output; } $theme_class = get_template() . '-theme'; $output .= " class='{$theme_class}'"; return $output; } public function enqueueAdminScripts() { $slug = get_template() . '-page-info'; $this->getAssetsManager()->registerScript( $slug, $this->getAssetsManager()->getBaseURL() . '/admin/admin.js', array( 'jquery' ), false )->registerStyle( $slug, $this->getAssetsManager()->getBaseURL() . '/admin/admin.css' . false ); } /** * @return AssetsManager */ public function getAssetsManager() { return $this->assets_manager; } public function addThemeNotice() { global $pagenow; if ( $pagenow === 'update.php' ) { return; } $slug = get_template() . '-page-info'; $dismissed = get_option( "{$slug}-theme-notice-dismissed", false ); $is_builder_installed = apply_filters( 'kubio_is_enabled', false ); if ( get_option( 'extend_builder_theme', false ) ) { $dismissed = true; } if ( ! $dismissed && ! $is_builder_installed ) { wp_enqueue_style( $slug ); wp_enqueue_script( $slug ); wp_enqueue_script( 'wp-util' ); ?>