true )
);
}
// Create icons directory if it doesn't exist.
if ( ! file_exists( MI_ICONS_DIR ) ) {
wp_mkdir_p( MI_ICONS_DIR );
}
// Initialize default settings.
$default_settings = array(
'active_set' => '',
'downloaded_sets' => array(),
);
if ( false === get_option( 'maple_icons_settings' ) ) {
add_option( 'maple_icons_settings', $default_settings );
}
// Flush rewrite rules.
flush_rewrite_rules();
}
register_activation_hook( MI_PLUGIN_FILE, 'mi_activate' );
/**
* Plugin deactivation hook.
*/
function mi_deactivate() {
// Clean up transients.
global $wpdb;
$wpdb->query(
"DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_mi_%' OR option_name LIKE '_transient_timeout_mi_%'"
);
flush_rewrite_rules();
}
register_deactivation_hook( MI_PLUGIN_FILE, 'mi_deactivate' );
/**
* Check WordPress version on admin init (in case WP was downgraded).
*/
function mi_check_wp_version() {
if ( version_compare( get_bloginfo( 'version' ), '6.5', '<' ) ) {
deactivate_plugins( MI_PLUGIN_BASENAME );
add_action( 'admin_notices', 'mi_wp_version_notice' );
}
}
add_action( 'admin_init', 'mi_check_wp_version' );
/**
* Display admin notice for WordPress version requirement.
*/
function mi_wp_version_notice() {
echo '
';
esc_html_e( 'Maple Icons has been deactivated. It requires WordPress 6.5 or higher.', 'maple-icons' );
echo '
';
}
/**
* Initialize the plugin.
*/
function mi_init() {
// Load text domain.
load_plugin_textdomain( 'maple-icons', false, dirname( MI_PLUGIN_BASENAME ) . '/languages' );
// Register the Gutenberg block.
mi_register_block();
}
add_action( 'init', 'mi_init' );
/**
* Register the Maple Icons Gutenberg block.
*/
function mi_register_block() {
// Check if build directory exists.
$block_path = MI_PLUGIN_DIR . 'build';
if ( ! file_exists( $block_path ) ) {
return;
}
register_block_type( $block_path );
}
/**
* Enqueue block editor assets.
*/
function mi_enqueue_block_assets() {
// Only load in block editor.
if ( ! is_admin() ) {
return;
}
$screen = get_current_screen();
if ( ! $screen || ! $screen->is_block_editor() ) {
return;
}
// Localize script data for the block editor.
$active_set = '';
$settings = get_option( 'maple_icons_settings', array() );
if ( ! empty( $settings['active_set'] ) ) {
$active_set = $settings['active_set'];
}
wp_localize_script(
'maple-icon-editor-script',
'miBlock',
array(
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'mi_block_nonce' ),
'activeSet' => $active_set,
'settingsUrl' => admin_url( 'options-general.php?page=maple-icons' ),
)
);
}
add_action( 'enqueue_block_editor_assets', 'mi_enqueue_block_assets' );
/**
* Initialize admin functionality.
*/
function mi_admin_init() {
// Initialize admin page.
new MI_Admin_Page();
// Initialize AJAX handler.
new MI_Ajax_Handler();
}
add_action( 'admin_init', 'mi_admin_init' );
/**
* Add settings link to plugin action links.
*
* @param array $links Plugin action links.
* @return array Modified action links.
*/
function mi_add_action_links( $links ) {
$settings_link = sprintf(
'%s',
admin_url( 'options-general.php?page=maple-icons' ),
__( 'Settings', 'maple-icons' )
);
array_unshift( $links, $settings_link );
return $links;
}
add_filter( 'plugin_action_links_' . MI_PLUGIN_BASENAME, 'mi_add_action_links' );
/**
* Declare WooCommerce HPOS compatibility.
*/
function mi_declare_hpos_compatibility() {
if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
'custom_order_tables',
MI_PLUGIN_FILE,
true
);
}
}
add_action( 'before_woocommerce_init', 'mi_declare_hpos_compatibility' );