Index: src/wp-includes/plugin.php
--- src/wp-includes/plugin.php
+++ src/wp-includes/plugin.php
@@ -35,6 +35,73 @@
 	$wp_current_filter = array();
 
 /**
+ * Helper function for including files in a filterable manner
+ *
+ * @since 4.4.0
+ *
+ * @param  string  $file      Full path to the file to include
+ * @param  bool    $required  True to require|False to include
+ * @param  bool    $once      True to include/require once|False
+ *
+ * @return void
+ */
+function wp_include( $file = '', $required = true, $once = false ) {
+
+	// Combine parameters into an array of arguments
+	$args = array(
+		'file'     => $file,
+		'required' => $required,
+		'once'     => $once
+	);
+
+	/**
+	 * Filter the file to include, and how to include it
+	 *
+	 * @since 4.4.0
+	 *
+	 * @param array $args An array built from the function parameters
+	 */
+	$r = apply_filters( 'wp_include', $args );
+
+	// Overwrite local variables with filtered ones
+	extract( $r );
+
+	// `require()` or `include()`
+	$func = ( true === $required )
+		? 'require'
+		: 'include';
+
+	// `require_once()` or `include_once()`
+	$func .= ( true === $once )
+		? '_once'
+		: '';
+
+	// What should we do?
+	switch ( $func ) {
+
+		// Require only one time
+		case 'require_once' :
+			require_once $file;
+			break;
+
+		// Include only one time
+		case 'include_once' :
+			include_once $file;
+			break;
+
+		// Require, maybe again
+		case 'require' :
+			require $file;
+			break;
+
+		// Include, maybe again
+		case 'include' :
+		default :
+			include $file;
+	}
+}
+
+/**
  * Hook a function or method to a specific filter action.
  *
  * WordPress offers filter hooks to allow plugins to modify
Index: src/wp-settings.php
--- src/wp-settings.php
+++ src/wp-settings.php
@@ -18,8 +18,8 @@
 define( 'WPINC', 'wp-includes' );
 
 // Include files required for initialization.
-require( ABSPATH . WPINC . '/load.php' );
-require( ABSPATH . WPINC . '/default-constants.php' );
+wp_include( ABSPATH . WPINC . '/load.php' );
+wp_include( ABSPATH . WPINC . '/default-constants.php' );
 
 /*
  * These can't be directly globalized in version.php. When updating,
@@ -27,7 +27,7 @@
  * these values to be overridden if already set.
  */
 global $wp_version, $wp_db_version, $tinymce_version, $required_php_version, $required_mysql_version;
-require( ABSPATH . WPINC . '/version.php' );
+wp_include( ABSPATH . WPINC . '/version.php' );
 
 // Set initial default constants including WP_MEMORY_LIMIT, WP_MAX_MEMORY_LIMIT, WP_DEBUG, SCRIPT_DEBUG, WP_CONTENT_DIR and WP_CACHE.
 wp_initial_constants();
@@ -68,12 +68,12 @@
 wp_set_lang_dir();
 
 // Load early WordPress files.
-require( ABSPATH . WPINC . '/compat.php' );
-require( ABSPATH . WPINC . '/functions.php' );
-require( ABSPATH . WPINC . '/class-wp.php' );
-require( ABSPATH . WPINC . '/class-wp-error.php' );
-require( ABSPATH . WPINC . '/plugin.php' );
-require( ABSPATH . WPINC . '/pomo/mo.php' );
+wp_include( ABSPATH . WPINC . '/compat.php' );
+wp_include( ABSPATH . WPINC . '/functions.php' );
+wp_include( ABSPATH . WPINC . '/class-wp.php' );
+wp_include( ABSPATH . WPINC . '/class-wp-error.php' );
+wp_include( ABSPATH . WPINC . '/plugin.php' );
+wp_include( ABSPATH . WPINC . '/pomo/mo.php' );
 
 // Include the wpdb class and, if present, a db.php database drop-in.
 require_wp_db();
@@ -86,12 +86,12 @@
 wp_start_object_cache();
 
 // Attach the default filters.
-require( ABSPATH . WPINC . '/default-filters.php' );
+wp_include( ABSPATH . WPINC . '/default-filters.php' );
 
 // Initialize multisite if enabled.
 if ( is_multisite() ) {
-	require( ABSPATH . WPINC . '/ms-blogs.php' );
-	require( ABSPATH . WPINC . '/ms-settings.php' );
+	wp_include( ABSPATH . WPINC . '/ms-blogs.php' );
+	wp_include( ABSPATH . WPINC . '/ms-settings.php' );
 } elseif ( ! defined( 'MULTISITE' ) ) {
 	define( 'MULTISITE', false );
 }
@@ -103,62 +103,62 @@
 	return false;
 
 // Load the L10n library.
-require_once( ABSPATH . WPINC . '/l10n.php' );
+wp_include( ABSPATH . WPINC . '/l10n.php', true, true );
 
 // Run the installer if WordPress is not installed.
 wp_not_installed();
 
 // Load most of WordPress.
-require( ABSPATH . WPINC . '/class-wp-walker.php' );
-require( ABSPATH . WPINC . '/class-wp-ajax-response.php' );
-require( ABSPATH . WPINC . '/formatting.php' );
-require( ABSPATH . WPINC . '/capabilities.php' );
-require( ABSPATH . WPINC . '/query.php' );
-require( ABSPATH . WPINC . '/date.php' );
-require( ABSPATH . WPINC . '/theme.php' );
-require( ABSPATH . WPINC . '/class-wp-theme.php' );
-require( ABSPATH . WPINC . '/template.php' );
-require( ABSPATH . WPINC . '/user.php' );
-require( ABSPATH . WPINC . '/session.php' );
-require( ABSPATH . WPINC . '/meta.php' );
-require( ABSPATH . WPINC . '/general-template.php' );
-require( ABSPATH . WPINC . '/link-template.php' );
-require( ABSPATH . WPINC . '/author-template.php' );
-require( ABSPATH . WPINC . '/post.php' );
-require( ABSPATH . WPINC . '/post-template.php' );
-require( ABSPATH . WPINC . '/revision.php' );
-require( ABSPATH . WPINC . '/post-formats.php' );
-require( ABSPATH . WPINC . '/post-thumbnail-template.php' );
-require( ABSPATH . WPINC . '/category.php' );
-require( ABSPATH . WPINC . '/category-template.php' );
-require( ABSPATH . WPINC . '/comment.php' );
-require( ABSPATH . WPINC . '/comment-template.php' );
-require( ABSPATH . WPINC . '/rewrite.php' );
-require( ABSPATH . WPINC . '/feed.php' );
-require( ABSPATH . WPINC . '/bookmark.php' );
-require( ABSPATH . WPINC . '/bookmark-template.php' );
-require( ABSPATH . WPINC . '/kses.php' );
-require( ABSPATH . WPINC . '/cron.php' );
-require( ABSPATH . WPINC . '/deprecated.php' );
-require( ABSPATH . WPINC . '/script-loader.php' );
-require( ABSPATH . WPINC . '/taxonomy.php' );
-require( ABSPATH . WPINC . '/update.php' );
-require( ABSPATH . WPINC . '/canonical.php' );
-require( ABSPATH . WPINC . '/shortcodes.php' );
-require( ABSPATH . WPINC . '/class-wp-embed.php' );
-require( ABSPATH . WPINC . '/media.php' );
-require( ABSPATH . WPINC . '/http.php' );
-require( ABSPATH . WPINC . '/class-http.php' );
-require( ABSPATH . WPINC . '/widgets.php' );
-require( ABSPATH . WPINC . '/nav-menu.php' );
-require( ABSPATH . WPINC . '/nav-menu-template.php' );
-require( ABSPATH . WPINC . '/admin-bar.php' );
+wp_include( ABSPATH . WPINC . '/class-wp-walker.php' );
+wp_include( ABSPATH . WPINC . '/class-wp-ajax-response.php' );
+wp_include( ABSPATH . WPINC . '/formatting.php' );
+wp_include( ABSPATH . WPINC . '/capabilities.php' );
+wp_include( ABSPATH . WPINC . '/query.php' );
+wp_include( ABSPATH . WPINC . '/date.php' );
+wp_include( ABSPATH . WPINC . '/theme.php' );
+wp_include( ABSPATH . WPINC . '/class-wp-theme.php' );
+wp_include( ABSPATH . WPINC . '/template.php' );
+wp_include( ABSPATH . WPINC . '/user.php' );
+wp_include( ABSPATH . WPINC . '/session.php' );
+wp_include( ABSPATH . WPINC . '/meta.php' );
+wp_include( ABSPATH . WPINC . '/general-template.php' );
+wp_include( ABSPATH . WPINC . '/link-template.php' );
+wp_include( ABSPATH . WPINC . '/author-template.php' );
+wp_include( ABSPATH . WPINC . '/post.php' );
+wp_include( ABSPATH . WPINC . '/post-template.php' );
+wp_include( ABSPATH . WPINC . '/revision.php' );
+wp_include( ABSPATH . WPINC . '/post-formats.php' );
+wp_include( ABSPATH . WPINC . '/post-thumbnail-template.php' );
+wp_include( ABSPATH . WPINC . '/category.php' );
+wp_include( ABSPATH . WPINC . '/category-template.php' );
+wp_include( ABSPATH . WPINC . '/comment.php' );
+wp_include( ABSPATH . WPINC . '/comment-template.php' );
+wp_include( ABSPATH . WPINC . '/rewrite.php' );
+wp_include( ABSPATH . WPINC . '/feed.php' );
+wp_include( ABSPATH . WPINC . '/bookmark.php' );
+wp_include( ABSPATH . WPINC . '/bookmark-template.php' );
+wp_include( ABSPATH . WPINC . '/kses.php' );
+wp_include( ABSPATH . WPINC . '/cron.php' );
+wp_include( ABSPATH . WPINC . '/deprecated.php' );
+wp_include( ABSPATH . WPINC . '/script-loader.php' );
+wp_include( ABSPATH . WPINC . '/taxonomy.php' );
+wp_include( ABSPATH . WPINC . '/update.php' );
+wp_include( ABSPATH . WPINC . '/canonical.php' );
+wp_include( ABSPATH . WPINC . '/shortcodes.php' );
+wp_include( ABSPATH . WPINC . '/class-wp-embed.php' );
+wp_include( ABSPATH . WPINC . '/media.php' );
+wp_include( ABSPATH . WPINC . '/http.php' );
+wp_include( ABSPATH . WPINC . '/class-http.php' );
+wp_include( ABSPATH . WPINC . '/widgets.php' );
+wp_include( ABSPATH . WPINC . '/nav-menu.php' );
+wp_include( ABSPATH . WPINC . '/nav-menu-template.php' );
+wp_include( ABSPATH . WPINC . '/admin-bar.php' );
 
 // Load multisite-specific files.
 if ( is_multisite() ) {
-	require( ABSPATH . WPINC . '/ms-functions.php' );
-	require( ABSPATH . WPINC . '/ms-default-filters.php' );
-	require( ABSPATH . WPINC . '/ms-deprecated.php' );
+	wp_include( ABSPATH . WPINC . '/ms-functions.php' );
+	wp_include( ABSPATH . WPINC . '/ms-default-filters.php' );
+	wp_include( ABSPATH . WPINC . '/ms-deprecated.php' );
 }
 
 // Define constants that rely on the API to obtain the default value.
@@ -169,7 +169,7 @@
 
 // Load must-use plugins.
 foreach ( wp_get_mu_plugins() as $mu_plugin ) {
-	include_once( $mu_plugin );
+	wp_include( $mu_plugin, false, true );
 }
 unset( $mu_plugin );
 
@@ -177,7 +177,7 @@
 if ( is_multisite() ) {
 	foreach( wp_get_active_network_plugins() as $network_plugin ) {
 		wp_register_plugin_realpath( $network_plugin );
-		include_once( $network_plugin );
+		wp_include( $network_plugin, false, true );
 	}
 	unset( $network_plugin );
 }
@@ -199,7 +199,7 @@
 wp_ssl_constants();
 
 // Create common globals.
-require( ABSPATH . WPINC . '/vars.php' );
+wp_include( ABSPATH . WPINC . '/vars.php' );
 
 // Make taxonomies and posts available to plugins and themes.
 // @plugin authors: warning: these get registered again on the init hook.
@@ -212,13 +212,13 @@
 // Load active plugins.
 foreach ( wp_get_active_and_valid_plugins() as $plugin ) {
 	wp_register_plugin_realpath( $plugin );
-	include_once( $plugin );
+	wp_include( $plugin, false, true );
 }
 unset( $plugin );
 
 // Load pluggable functions.
-require( ABSPATH . WPINC . '/pluggable.php' );
-require( ABSPATH . WPINC . '/pluggable-deprecated.php' );
+wp_include( ABSPATH . WPINC . '/pluggable.php' );
+wp_include( ABSPATH . WPINC . '/pluggable-deprecated.php' );
 
 // Set internal encoding.
 wp_set_internal_encoding();
@@ -308,11 +308,11 @@
 $locale = get_locale();
 $locale_file = WP_LANG_DIR . "/$locale.php";
 if ( ( 0 === validate_file( $locale ) ) && is_readable( $locale_file ) )
-	require( $locale_file );
+	wp_include( $locale_file );
 unset( $locale_file );
 
 // Pull in locale data after loading text domain.
-require_once( ABSPATH . WPINC . '/locale.php' );
+wp_include( ABSPATH . WPINC . '/locale.php', true, true );
 
 /**
  * WordPress Locale object for loading locale domain date and various strings.
@@ -355,7 +355,7 @@
 // Check site status
 if ( is_multisite() ) {
 	if ( true !== ( $file = ms_site_check() ) ) {
-		require( $file );
+		wp_include( $file );
 		die();
 	}
 	unset($file);
