load_dependencies(); } /** * 取得单例。 * * @return APGT_Plugin */ public static function instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * 加载依赖文件。 * * @return void */ private function load_dependencies() { // 数据层与工具。 require_once APGT_PLUGIN_DIR . 'includes/functions.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-install.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-settings.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-service.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-store.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-prompt.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-html.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-translator.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-pages.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-progress.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-lock.php'; require_once APGT_PLUGIN_DIR . 'includes/class-apgt-jobs.php'; // 界面模块。 require_once APGT_PLUGIN_DIR . 'admin/class-apgt-ajax.php'; require_once APGT_PLUGIN_DIR . 'admin/class-apgt-admin.php'; require_once APGT_PLUGIN_DIR . 'public/class-apgt-public.php'; } /** * 注册钩子并启动各模块。 * * @return void */ public function run() { // 每次加载检测数据表版本,按需建表/升级(开销极小)。 add_action( 'plugins_loaded', array( 'APGT_Install', 'maybe_install' ) ); // 语言包不用手动加载:translate.wordpress.org 下发的落在 WP_LANG_DIR/plugins/, // 插件自带的 languages/ 目录 WP 6.7 起核心也会自动扫描(最低要求就定在 6.7)。 if ( is_admin() ) { $this->admin = new APGT_Admin(); $this->admin->init(); } $this->public = new APGT_Public(); $this->public->init(); } /** * 插件版本号。 * * @return string */ public function version() { return APGT_VERSION; } // 单例:禁止克隆与反序列化。 /** * 禁止克隆。 * * @return void */ private function __clone() {} /** * 禁止反序列化。 * * @return void * @throws Exception 始终抛出。 */ public function __wakeup() { throw new Exception( 'Cannot unserialize singleton.' ); } }