is_available() ) { $adapter->register_hooks(); ( new Assets() )->register(); } if ( is_admin() ) { ( new Admin() )->register(); } } /** * Seeds the default option on activation (network-aware). * * @param bool $network_wide Whether the plugin was activated network-wide. */ public static function activation_hook( $network_wide = false ): void { if ( $network_wide && is_multisite() ) { $site_ids = get_sites( array( 'fields' => 'ids' ) ); foreach ( (array) $site_ids as $blog_id ) { switch_to_blog( (int) $blog_id ); add_option( Constants::DEFAULT_ENABLED_OPTION, 0 ); restore_current_blog(); } return; } add_option( Constants::DEFAULT_ENABLED_OPTION, 0 ); } /** * Ensures new multisite sites start with tracking disabled by default. * * @param \WP_Site $new_site The newly created site object. */ public static function handle_initialize_site( $new_site ): void { if ( ! is_multisite() ) { return; } $blog_id = is_object( $new_site ) && isset( $new_site->blog_id ) ? (int) $new_site->blog_id : 0; if ( $blog_id <= 0 ) { return; } switch_to_blog( $blog_id ); add_option( Constants::DEFAULT_ENABLED_OPTION, 0 ); restore_current_blog(); } /** * Removes the plugin's options and cache on full uninstall (network-aware). */ public static function uninstall_hook(): void { if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) { return; } if ( is_multisite() ) { $site_ids = get_sites( array( 'fields' => 'ids' ) ); foreach ( (array) $site_ids as $blog_id ) { switch_to_blog( (int) $blog_id ); self::delete_site_data(); restore_current_blog(); } return; } self::delete_site_data(); } /** * Deletes the plugin's options and cached count for the current site. */ private static function delete_site_data(): void { delete_option( Constants::DEFAULT_ENABLED_OPTION ); delete_option( Constants::ATTRIBUTION_OPTION ); delete_transient( Admin::COUNT_TRANSIENT ); } /** * Returns whether a plugin is active; safe to call on the front end too. * * @param string $plugin Plugin basename, e.g. "foo/foo.php". */ public static function is_plugin_active_safe( string $plugin ): bool { if ( ! function_exists( 'is_plugin_active' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } return is_plugin_active( $plugin ); } }