-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Commit
WP_DEVELOPMENT_MODE
constant to signify context-…
…specific development mode. In recent releases, WordPress core added several instances of cache usage around specific files. While those caches are safe to use in a production context, in development certain nuances apply for whether or not those caches make sense to use. Initially, `WP_DEBUG` was used as a temporary workaround, but it was clear that a more granular method to signify a specific development mode was required: For example, caches around `theme.json` should be disabled when working on a theme as otherwise it would disrupt the theme developer's workflow, but when working on a plugin or WordPress core, this consideration does not apply. This changeset introduces a `WP_DEVELOPMENT_MODE` constant which, for now, can be set to either "core", "plugin", "theme", or an empty string, the latter of which means no development mode, which is also the default. A new function `wp_get_development_mode()` is the recommended way to retrieve that configuration value. With the new function available, this changeset replaces all existing instances of the aforementioned `WP_DEBUG` workaround to use `wp_get_development_mode()` with a more specific check. Props azaozz, sergeybiryukov, peterwilsoncc, spacedmonkey. Fixes #57487. git-svn-id: https://develop.svn.wordpress.org/trunk@56042 602fd350-edb4-49c9-b593-d223f7449a82
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 ) { | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
ramonjd
Member
|
||
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. | ||
* | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<?php | ||
/** | ||
* Unit tests for `wp_get_development_mode()`. | ||
* | ||
* @package WordPress | ||
* @subpackage UnitTests | ||
* @since 6.3.0 | ||
* | ||
* @group load.php | ||
* @covers ::wp_get_development_mode | ||
*/ | ||
class Test_WP_Get_Development_Mode extends WP_UnitTestCase { | ||
|
||
/** | ||
* Tests that `wp_get_development_mode()` returns the value of the `WP_DEVELOPMENT_MODE` constant. | ||
* | ||
* @ticket 57487 | ||
*/ | ||
public function test_wp_get_development_mode_constant() { | ||
$this->assertSame( WP_DEVELOPMENT_MODE, wp_get_development_mode() ); | ||
} | ||
|
||
/** | ||
* Tests that `wp_get_development_mode()` allows test overrides. | ||
* | ||
* @ticket 57487 | ||
*/ | ||
public function test_wp_get_development_mode_test_overrides() { | ||
global $_wp_tests_development_mode; | ||
|
||
$_wp_tests_development_mode = 'plugin'; | ||
$this->assertSame( 'plugin', wp_get_development_mode() ); | ||
} | ||
|
||
/** | ||
* Tests that `wp_get_development_mode()` ignores invalid filter values. | ||
* | ||
* @ticket 57487 | ||
*/ | ||
public function test_wp_get_development_mode_filter_invalid_value() { | ||
global $_wp_tests_development_mode; | ||
|
||
$_wp_tests_development_mode = 'invalid'; | ||
$this->assertSame( '', wp_get_development_mode() ); | ||
} | ||
} |
@felixarntz This change has broken many Gutenberg PHP unit tests, e.g., those that rely on
wp_theme_has_theme_json()
What's your suggestion to getting them running again?
Adding this to PHP unit test bootstrap.php seems to work