$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();
}
);