diff --git a/wp-includes/default-constants.php b/wp-includes/default-constants.php index 61f02a3f60..871a79c729 100644 --- a/wp-includes/default-constants.php +++ b/wp-includes/default-constants.php @@ -77,9 +77,18 @@ function wp_initial_constants() { define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); // No trailing slash, full paths only - WP_CONTENT_URL is defined further down. } + /* + * Add define( 'WP_DEVELOPMENT_MODE', 'core' ) or define( 'WP_DEVELOPMENT_MODE', 'plugin' ) or + * define( 'WP_DEVELOPMENT_MODE', 'theme' ) to wp-config.php to signify development mode for WordPress core, a + * plugin, or a theme respectively. + */ + if ( ! defined( 'WP_DEVELOPMENT_MODE' ) ) { + define( 'WP_DEVELOPMENT_MODE', '' ); + } + // Add define( 'WP_DEBUG', true ); to wp-config.php to enable display of notices during development. if ( ! defined( 'WP_DEBUG' ) ) { - if ( 'development' === wp_get_environment_type() ) { + if ( wp_get_development_mode() || 'development' === wp_get_environment_type() ) { define( 'WP_DEBUG', true ); } else { define( 'WP_DEBUG', false ); diff --git a/wp-includes/global-styles-and-settings.php b/wp-includes/global-styles-and-settings.php index 84d775efb0..8c0f48b87a 100644 --- a/wp-includes/global-styles-and-settings.php +++ b/wp-includes/global-styles-and-settings.php @@ -66,12 +66,10 @@ function wp_get_global_settings( $path = array(), $context = array() ) { $cache_key = 'wp_get_global_settings_' . $origin; /* - * Ignore cache when `WP_DEBUG` is enabled, so it doesn't interfere with the theme + * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme * developer's workflow. - * - * @todo Replace `WP_DEBUG` once an "in development mode" check is available in Core. */ - $can_use_cached = ! WP_DEBUG; + $can_use_cached = wp_get_development_mode() !== 'theme'; $settings = false; if ( $can_use_cached ) { @@ -151,12 +149,10 @@ function wp_get_global_styles( $path = array(), $context = array() ) { */ function wp_get_global_stylesheet( $types = array() ) { /* - * Ignore cache when `WP_DEBUG` is enabled, so it doesn't interfere with the theme + * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme * developer's workflow. - * - * @todo Replace `WP_DEBUG` once an "in development mode" check is available in Core. */ - $can_use_cached = empty( $types ) && ! WP_DEBUG; + $can_use_cached = empty( $types ) && wp_get_development_mode() !== 'theme'; /* * By using the 'theme_json' group, this data is marked to be non-persistent across requests. @@ -252,12 +248,10 @@ function wp_get_global_styles_custom_css() { return ''; } /* - * Ignore cache when `WP_DEBUG` is enabled, so it doesn't interfere with the theme + * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme * developer's workflow. - * - * @todo Replace `WP_DEBUG` once an "in development mode" check is available in Core. */ - $can_use_cached = ! WP_DEBUG; + $can_use_cached = wp_get_development_mode() !== 'theme'; /* * By using the 'theme_json' group, this data is marked to be non-persistent across requests. @@ -303,12 +297,10 @@ function wp_get_global_styles_custom_css() { */ function wp_get_global_styles_svg_filters() { /* - * Ignore cache when `WP_DEBUG` is enabled, so it doesn't interfere with the theme + * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme * developer's workflow. - * - * @todo Replace `WP_DEBUG` once an "in development mode" check is available in Core. */ - $can_use_cached = ! WP_DEBUG; + $can_use_cached = wp_get_development_mode() !== 'theme'; $cache_group = 'theme_json'; $cache_key = 'wp_get_global_styles_svg_filters'; if ( $can_use_cached ) { @@ -402,12 +394,10 @@ function wp_theme_has_theme_json() { if ( null !== $theme_has_support && /* - * Ignore static cache when `WP_DEBUG` is enabled. Why? To avoid interfering with + * Ignore static cache when the development mode is set to 'theme', to avoid interfering with * the theme developer's workflow. - * - * @todo Replace `WP_DEBUG` once an "in development mode" check is available in Core. */ - ! WP_DEBUG && + wp_get_development_mode() !== 'theme' && /* * Ignore cache when automated test suites are running. Why? To ensure * the static cache is reset between each test. diff --git a/wp-includes/load.php b/wp-includes/load.php index 268af02976..c0398cb4f9 100644 --- a/wp-includes/load.php +++ b/wp-includes/load.php @@ -261,6 +261,50 @@ function wp_get_environment_type() { return $current_env; } +/** + * Retrieves the current development mode. + * + * The development mode affects how certain parts of the WordPress application behave, which is relevant when + * developing for WordPress. + * + * Valid developer modes are 'core', 'plugin', 'theme', or an empty string to disable developer mode. + * + * Developer mode is considered separately from `WP_DEBUG` and {@see wp_get_environment_type()}. It does not affect + * debugging output, but rather functional nuances in WordPress. + * + * @since 6.3.0 + * + * @return string The current development mode. + */ +function wp_get_development_mode() { + static $current_mode = null; + + if ( ! defined( 'WP_RUN_CORE_TESTS' ) && null !== $current_mode ) { + return $current_mode; + } + + $development_mode = WP_DEVELOPMENT_MODE; + + // Exclusively for core tests, rely on a global `$_wp_tests_development_mode`. + if ( defined( 'WP_RUN_CORE_TESTS' ) && isset( $GLOBALS['_wp_tests_development_mode'] ) ) { + $development_mode = $GLOBALS['_wp_tests_development_mode']; + } + + $valid_modes = array( + 'core', + 'plugin', + 'theme', + '', + ); + if ( ! in_array( $development_mode, $valid_modes, true ) ) { + $development_mode = ''; + } + + $current_mode = $development_mode; + + return $current_mode; +} + /** * Don't load all of WordPress when handling a favicon.ico request. * diff --git a/wp-includes/version.php b/wp-includes/version.php index 249586fc10..90248a29c8 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.3-alpha-56041'; +$wp_version = '6.3-alpha-56042'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.