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' );