trailingslashit( $upload['basedir'] ) . 'easyfonts', 'url' => set_url_scheme( trailingslashit( $upload['baseurl'] ) . 'easyfonts' ), ); } return $paths; } /** * Boot the plugin on plugins_loaded. */ add_action( 'plugins_loaded', static function () { $paths = easyfonts_paths(); if ( ! defined( 'EASYFONTS_CACHE_DIR' ) ) { define( 'EASYFONTS_CACHE_DIR', $paths['path'] ); } if ( ! defined( 'EASYFONTS_CACHE_URL' ) ) { define( 'EASYFONTS_CACHE_URL', $paths['url'] ); } \EasyFonts\Plugin::instance(); } ); /** * WP-CLI registration (loaded outside the normal request lifecycle). */ if ( defined( 'WP_CLI' ) && WP_CLI ) { add_action( 'cli_init', static function () { \WP_CLI::add_command( 'easyfonts', \EasyFonts\Cli\Command::class ); } ); } /** * Activation — create tables, seed defaults, mark for rewrite. * * On multisite the activation hook fires once even for a network-wide enable, * so when network-activated we install on every existing site. New sites * created later are handled by the wp_initialize_site hook below, and any site * that somehow slips through self-heals on its first load (Plugin::maybe_migrate). * * @param bool $network_wide Whether the plugin is being network-activated. */ register_activation_hook( __FILE__, static function ( $network_wide = false ) { require_once EASYFONTS_DIR . 'src/Database/Migrator.php'; $install = static function () { ( new \EasyFonts\Database\Migrator() )->install(); add_option( 'easyfonts_activated_at', time() ); }; if ( is_multisite() && $network_wide ) { $site_ids = get_sites( array( 'fields' => 'ids', 'number' => 0 ) ); foreach ( $site_ids as $site_id ) { switch_to_blog( (int) $site_id ); $install(); restore_current_blog(); } return; } $install(); } ); /** * Multisite: install tables when a brand-new subsite is created, if the plugin * is network-active. (WP 5.1+ passes a WP_Site; older signatures are tolerated.) * * @param mixed $site New site (WP_Site) or blog id. */ add_action( 'wp_initialize_site', static function ( $site ) { if ( ! is_multisite() ) { return; } if ( ! function_exists( 'is_plugin_active_for_network' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } if ( ! is_plugin_active_for_network( EASYFONTS_BASENAME ) ) { return; } $blog_id = is_object( $site ) && isset( $site->blog_id ) ? (int) $site->blog_id : (int) $site; if ( $blog_id <= 0 ) { return; } require_once EASYFONTS_DIR . 'src/Database/Migrator.php'; switch_to_blog( $blog_id ); ( new \EasyFonts\Database\Migrator() )->install(); restore_current_blog(); }, 10, 1 ); /** * Deactivation — clear scheduled events. */ register_deactivation_hook( __FILE__, static function () { wp_clear_scheduled_hook( 'easyfonts_cleanup' ); } );