$links Existing action links. * @return array Modified action links. */ function plugin_action_links( array $links ): array { $settings_link = sprintf( '%2$s', admin_url( 'options-general.php?page=ai' ), esc_html__( 'Settings', 'ai' ) ); $connectors_link = sprintf( '%2$s', admin_url( 'options-connectors.php' ), esc_html__( 'Connectors', 'ai' ) ); array_unshift( $links, $connectors_link, $settings_link ); return $links; } /** * Loads the plugin after checking requirements. * * @since 0.1.0 */ function load(): void { static $loaded = false; // Prevent loading twice. if ( $loaded ) { return; } // Check version requirements. if ( ! check_php_version() || ! check_wp_version() ) { return; } // Load required files. require_once WPAI_PLUGIN_DIR . 'includes/autoload.php'; require_once WPAI_PLUGIN_DIR . 'includes/helpers.php'; // Handle any pending upgrades. ( new Upgrades() )->init(); // Handle deprecated code. ( new Deprecated() )->init(); $loaded = true; // Add plugin action links. add_filter( 'plugin_action_links_' . plugin_basename( WPAI_PLUGIN_FILE ), __NAMESPACE__ . '\plugin_action_links' ); // Hook feature initialization to init. add_action( 'init', __NAMESPACE__ . '\initialize_features', 15 ); } /** * Initializes plugin features. * * @since 0.1.0 */ function initialize_features(): void { try { // Experiments are hooked into our Loader, so we need to register them first. $experiments = new Experiments(); $experiments->init(); $registry = new Registry(); $loader = new Loader( $registry ); $loader->register_features(); $loader->initialize_features(); // Initialize settings registration. $settings_registration = new Settings_Registration( $registry ); $settings_registration->init(); // Initialize admin settings page. if ( is_admin() ) { $settings_page = new Settings_Page( $registry ); $settings_page->init(); } // Register our post-related WordPress Abilities. $post_abilities = new Posts(); $post_abilities->register(); add_action( 'wp_abilities_api_categories_init', static function () { /** * Register a generic catch-all category that all * Abilities we register can use. Can re-evaluate this * in the future if we need/want more specific categories. */ wp_register_ability_category( WPAI_DEFAULT_ABILITY_CATEGORY, array( 'label' => __( 'AI', 'ai' ), 'description' => __( 'Various AI features and experiments.', 'ai' ), ), ); } ); } catch ( \Throwable $t ) { _doing_it_wrong( __NAMESPACE__ . '\initialize_features', sprintf( /* translators: %s: Error message. */ esc_html__( 'AI Plugin initialization failed: %s', 'ai' ), esc_html( $t->getMessage() ) ), '0.1.0' ); } } add_action( 'plugins_loaded', __NAMESPACE__ . '\load' ); /** * Triggers when the plugin is activated. * * @since 0.6.0 */ register_activation_hook( WPAI_PLUGIN_FILE, static function (): void { // Load required files. require_once WPAI_PLUGIN_DIR . 'includes/autoload.php'; require_once WPAI_PLUGIN_DIR . 'includes/helpers.php'; Activation::activation_callback(); } );