+
+/**
+ * Determine if global tables should be upgraded.
+ *
+ * This function performs a series of checks to ensure the environment allows
+ * for the safe upgrading of global WordPress database tables. It is necessary
+ * because global tables will commonly grow to millions of rows on large
+ * installations, and the ability to control their upgrade routines can be
+ * critical to the operation of large networks.
+ *
+ * In a future iteration, this function may use `wp_is_large_network()` to more-
+ * intelligently prevent global table upgrades. Until then, we make sure
+ * WordPress is on the main site of the main network, to avoid running queries
+ * more than once in multi-site or multi-network environments.
+ *
+ * @since 4.3.0
+ *
+ * @return bool Whether to run the upgrade routines on global tables.
+ */
+function wp_should_upgrade_global_tables() {
+
+ // Return false early if explicitly not upgrading
+ if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) {
+ return false;
+ }
+
+ // Assume global tables should be upgraded
+ $should_upgrade = true;
+
+ // Set to false if not on main network (does not matter if not multi-network)
+ if ( ! is_main_network() ) {
+ $should_upgrade = false;
+ }
+
+ // Set to false if not on main site of current network (does not matter if not multi-site)
+ if ( ! is_main_site() ) {
+ $should_upgrade = false;
+ }
+
+ /**
+ * Filter if upgrade routines should be run on global tables.
+ *
+ * @param bool $should_upgrade Whether to run the upgrade routines on global tables.
+ */
+ return apply_filters( 'wp_should_upgrade_global_tables', $should_upgrade );
+}