define_constants(); $this->includes(); $this->init_hooks(); } /** * Define AI Answer Toolkit Constants. */ private function define_constants() { $this->define( 'AI_ANSWER_TOOLKIT_ABSPATH', dirname( AI_ANSWER_TOOLKIT_PLUGIN_FILE ) . '/' ); } /** * Define constant if not already set. * * @param string $name Constant name. * @param string|bool $value Constant value. */ private function define( $name, $value ) { if ( ! defined( $name ) ) { define( $name, $value ); } } /** * Include required core files. */ public function includes() { require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-install.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-loader.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-summary.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-score.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-ultimate-score.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-ultimate-hints.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-visibility.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-export.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-pdf-generator.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-content-guidance.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-ai-suggestions.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-rest-api.php'; if ( $this->is_request( 'admin' ) ) { require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'admin/class-ai-answer-toolkit-admin.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'admin/class-ai-answer-toolkit-unified-meta-box.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'admin/class-ai-answer-toolkit-dashboard.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'admin/class-ai-answer-toolkit-settings-page.php'; } if ( $this->is_request( 'frontend' ) ) { require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'includes/class-ai-answer-toolkit-frontend.php'; require_once AI_ANSWER_TOOLKIT_PLUGIN_DIR . 'schema/class-ai-answer-toolkit-schema.php'; } } /** * Hook into actions and filters. */ private function init_hooks() { register_activation_hook( AI_ANSWER_TOOLKIT_PLUGIN_FILE, array( 'AI_Answer_Toolkit_Install', 'activate' ) ); register_deactivation_hook( AI_ANSWER_TOOLKIT_PLUGIN_FILE, array( 'AI_Answer_Toolkit_Install', 'deactivate' ) ); add_action( 'plugins_loaded', array( $this, 'init' ), 0 ); add_action( 'init', array( $this, 'load_plugin_textdomain' ) ); } /** * Init AI Answer Toolkit when WordPress Initialises. */ public function init() { do_action( 'ai_answer_toolkit_before_init' ); $this->load_components(); do_action( 'ai_answer_toolkit_init' ); } /** * Load plugin components. */ private function load_components() { // Initialize REST API AI_Answer_Toolkit_REST_API::init(); // Initialize PDF Generator (registers PDF CSS for WordPress.org compliance) AI_Answer_Toolkit_PDF_Generator::init(); if ( $this->is_request( 'admin' ) ) { AI_Answer_Toolkit_Admin::instance(); } } /** * Load Localisation files. * Note: Since WordPress 4.6, translations are automatically loaded from WordPress.org. */ public function load_plugin_textdomain() { // Translations are automatically loaded by WordPress for plugins hosted on WordPress.org. // This function is kept for backwards compatibility but no longer calls load_plugin_textdomain(). } /** * What type of request is this? * * @param string $type admin, ajax, cron or frontend. * @return bool */ private function is_request( $type ) { switch ( $type ) { case 'admin': return is_admin(); case 'ajax': return defined( 'DOING_AJAX' ); case 'cron': return defined( 'DOING_CRON' ); case 'frontend': return ( ! is_admin() || defined( 'DOING_AJAX' ) ) && ! defined( 'DOING_CRON' ); } } /** * Get the plugin url. * * @return string */ public function plugin_url() { return untrailingslashit( plugins_url( '/', AI_ANSWER_TOOLKIT_PLUGIN_FILE ) ); } /** * Get the plugin path. * * @return string */ public function plugin_path() { return untrailingslashit( plugin_dir_path( AI_ANSWER_TOOLKIT_PLUGIN_FILE ) ); } /** * Get Ajax URL. * * @return string */ public function ajax_url() { return admin_url( 'admin-ajax.php', 'relative' ); } }