true] ); } // Ensure fonts directory exists $font_dir = wp_get_font_dir(); if (!file_exists($font_dir['path'])) { wp_mkdir_p($font_dir['path']); } } register_activation_hook(__FILE__, 'mlf_activate'); /** * Check WordPress version on admin init (in case WP was downgraded). */ function mlf_check_version() { if (version_compare(get_bloginfo('version'), '6.5', '<')) { deactivate_plugins(plugin_basename(__FILE__)); add_action('admin_notices', 'mlf_version_notice'); } } add_action('admin_init', 'mlf_check_version'); /** * Display version notice. */ function mlf_version_notice() { echo '

'; esc_html_e('Maple Local Fonts has been deactivated. It requires WordPress 6.5 or higher.', 'maple-local-fonts'); echo '

'; } /** * Declare WooCommerce HPOS compatibility. */ function mlf_declare_hpos_compatibility() { if (class_exists(\Automattic\WooCommerce\Utilities\FeaturesUtil::class)) { \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true ); } } add_action('before_woocommerce_init', 'mlf_declare_hpos_compatibility'); /** * Load plugin text domain. */ function mlf_load_textdomain() { load_plugin_textdomain('maple-local-fonts', false, dirname(MLF_PLUGIN_BASENAME) . '/languages'); } add_action('plugins_loaded', 'mlf_load_textdomain'); /** * Autoload plugin classes. */ function mlf_autoload($class) { $prefix = 'MLF_'; if (strpos($class, $prefix) !== 0) { return; } $class_name = str_replace($prefix, '', $class); $class_name = str_replace('_', '-', strtolower($class_name)); $file = MLF_PLUGIN_DIR . 'includes/class-mlf-' . $class_name . '.php'; if (file_exists($file)) { require_once $file; } } spl_autoload_register('mlf_autoload'); /** * Initialize the plugin. */ function mlf_init() { // Only load admin functionality if (is_admin()) { new MLF_Admin_Page(); new MLF_Ajax_Handler(); } } add_action('plugins_loaded', 'mlf_init', 20); /** * Register REST API routes. */ function mlf_register_rest_routes() { $controller = new MLF_Rest_Controller(); $controller->register_routes(); } add_action('rest_api_init', 'mlf_register_rest_routes'); /** * Get the required capability for managing fonts. * * @return string The capability required to manage fonts. */ function mlf_get_capability() { /** * Filter the capability required to manage local fonts. * * @since 1.0.0 * @param string $capability Default capability is 'edit_theme_options'. */ return apply_filters('mlf_manage_fonts_capability', 'edit_theme_options'); } /** * Register admin menu. */ function mlf_register_menu() { add_submenu_page( 'themes.php', __('Maple Local Fonts', 'maple-local-fonts'), __('Local Fonts', 'maple-local-fonts'), mlf_get_capability(), 'maple-local-fonts', 'mlf_render_admin_page' ); } add_action('admin_menu', 'mlf_register_menu'); /** * Render admin page (delegates to MLF_Admin_Page). */ function mlf_render_admin_page() { $admin_page = new MLF_Admin_Page(); $admin_page->render(); } /** * Enqueue admin assets. * * @param string $hook The current admin page hook. */ function mlf_enqueue_admin_assets($hook) { if ($hook !== 'appearance_page_maple-local-fonts') { return; } wp_enqueue_style( 'mlf-admin', MLF_PLUGIN_URL . 'assets/admin.css', [], MLF_VERSION ); wp_enqueue_script( 'mlf-admin', MLF_PLUGIN_URL . 'assets/admin.js', ['jquery'], MLF_VERSION, true ); wp_localize_script('mlf-admin', 'mapleLocalFontsData', [ 'ajaxUrl' => admin_url('admin-ajax.php'), 'downloadNonce' => wp_create_nonce('mlf_download_font'), 'deleteNonce' => wp_create_nonce('mlf_delete_font'), 'strings' => [ 'downloading' => __('Downloading...', 'maple-local-fonts'), 'deleting' => __('Deleting...', 'maple-local-fonts'), 'confirmDelete' => __('Are you sure you want to delete this font?', 'maple-local-fonts'), 'error' => __('An error occurred. Please try again.', 'maple-local-fonts'), 'selectWeight' => __('Please select at least one weight.', 'maple-local-fonts'), 'selectStyle' => __('Please select at least one style.', 'maple-local-fonts'), 'enterFontName' => __('Please enter a font name.', 'maple-local-fonts'), ], ]); } add_action('admin_enqueue_scripts', 'mlf_enqueue_admin_assets');