define_constants(); self::$instance->load_textdomain(); self::$instance->register_modules(); } return self::$instance; } /** * Get plugin version. */ public static function version(): string { return self::$version; } /** * Prevent direct creation. */ private function __construct() {} /** * Prevent cloning. */ private function __clone() {} /** * Prevent unserializing. */ public function __wakeup(): void { throw new \Exception( 'Cannot unserialize singleton.' ); } /** * Define plugin constants. */ private function define_constants(): void { if ( ! defined( 'FLBL_FILE' ) ) { define( 'FLBL_FILE', dirname( __DIR__ ) . '/flexify-blocks.php' ); } if ( ! defined( 'FLBL_VERSION' ) ) { $plugin_data = get_file_data( FLBL_FILE, [ 'Version' => 'Version', ] ); self::$version = $plugin_data['Version'] ?? ''; define( 'FLBL_VERSION', self::$version ); } if ( ! defined( 'FLBL_DIR' ) ) { define( 'FLBL_DIR', plugin_dir_path( FLBL_FILE ) ); } if ( ! defined( 'FLBL_BLOCKS_DIR' ) ) { define( 'FLBL_BLOCKS_DIR', FLBL_DIR . 'build/blocks/' ); } if ( ! defined( 'FLBL_URL' ) ) { define( 'FLBL_URL', plugin_dir_url( FLBL_FILE ) ); } if (!defined('FLBL_PLUGIN_BASENAME')) { define('FLBL_PLUGIN_BASENAME', plugin_basename(FLBL_FILE)); } if (!defined('FLBL_PRO_URL')) { define('FLBL_PRO_URL', '#'); } if (!defined('FLBL_PRO_ACTIVE')) { define('FLBL_PRO_ACTIVE', class_exists('FlexifyBlocksPro\App') ? true : false); } } /** * Load translations. */ private function load_textdomain(): void { load_plugin_textdomain( 'flexify-blocks', false, dirname( plugin_basename( FLBL_FILE ) ) . '/languages' ); } /** * Register plugin modules. */ private function register_modules(): void { Admin\Admin::instance(); RestApi\RestApi::instance(); Core\BlockLoader::instance(); Core\BlockStyleManager::instance(); Core\SupportSvg::instance(); // Theme support fallback. if ( ! current_theme_supports( 'menus' ) ) { add_theme_support( 'menus' ); } } }