public static function init() {
		$class = get_called_class();

		// Admin menu entry for upload debugging.
		add_action('admin_menu', array($class, 'menu_debug'));

		// Override upload file validation (general).
		add_filter('wp_check_filetype_and_ext', array($class, 'check_filetype_and_ext'), 10, 4);

		// Override upload file validation (SVG).
		add_filter('wp_check_filetype_and_ext', array($class, 'check_filetype_and_ext_svg'), 15, 4);

		// Set up translations.
		add_action('plugins_loaded', array($class, 'localize'));

		// Update check on debug page.
		add_action('admin_notices', array($class, 'debug_notice'));

		// AJAX hook for disabling contributor lookups.
		add_action('wp_ajax_bm_ajax_disable_contributor_notice', array($class, 'disable_contributor_notice'));

		// And the corresponding warnings.
		add_filter('admin_notices', array($class, 'contributors_changed_notice'));

		// Pull remote contributor information.
		$next = wp_next_scheduled('cron_get_remote_contributors');
		if ('disabled' === get_option('bm_contributor_notice', false)) {
			// Make sure the CRON job is disabled.
			if ($next) {
				wp_unschedule_event($next, 'cron_get_remote_contributors');
			}
		}
		else {
			add_action('cron_get_remote_contributors', array($class, 'cron_get_remote_contributors'));
			if (!$next) {
				wp_schedule_event(time(), 'hourly', 'cron_get_remote_contributors');
			}
		}

		// Register plugins page quick links if we aren't running in
		// Must-Use mode.
		if (!BLOBMIMES_MUST_USE) {
			add_filter('plugin_action_links_' . plugin_basename(BLOBMIMES_INDEX), array($class, 'plugin_action_links'));
		}
	}