mirror of
git://develop.git.wordpress.org/
synced 2025-02-25 17:13:30 +01:00
Themes: Clear existing pattern cache when in theme development mode and prevent PHP warning due to missing file.
Follow up to [56765]. Props spacedmonkey, afercia, jrf, flixos90. Fixes #59591. See #59490. git-svn-id: https://develop.svn.wordpress.org/trunk@56931 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
93782b5177
commit
8382683459
@ -350,9 +350,25 @@ function _register_theme_block_patterns() {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$file_path = $dirpath . $file;
|
||||||
|
|
||||||
|
if ( ! file_exists( $file_path ) ) {
|
||||||
|
_doing_it_wrong(
|
||||||
|
__FUNCTION__,
|
||||||
|
sprintf(
|
||||||
|
/* translators: %s: file name. */
|
||||||
|
__( 'Could not register file "%s" as a block pattern as the file does not exist.' ),
|
||||||
|
$file
|
||||||
|
),
|
||||||
|
'6.4.0'
|
||||||
|
);
|
||||||
|
$theme->delete_pattern_cache();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// The actual pattern content is the output of the file.
|
// The actual pattern content is the output of the file.
|
||||||
ob_start();
|
ob_start();
|
||||||
include $dirpath . $file;
|
include $file_path;
|
||||||
$pattern_data['content'] = ob_get_clean();
|
$pattern_data['content'] = ob_get_clean();
|
||||||
if ( ! $pattern_data['content'] ) {
|
if ( ! $pattern_data['content'] ) {
|
||||||
continue;
|
continue;
|
||||||
@ -408,11 +424,13 @@ add_action( 'init', '_register_theme_block_patterns' );
|
|||||||
function _wp_get_block_patterns( WP_Theme $theme ) {
|
function _wp_get_block_patterns( WP_Theme $theme ) {
|
||||||
$can_use_cached = ! wp_is_development_mode( 'theme' );
|
$can_use_cached = ! wp_is_development_mode( 'theme' );
|
||||||
|
|
||||||
if ( $can_use_cached ) {
|
$pattern_data = $theme->get_pattern_cache();
|
||||||
$pattern_data = $theme->get_pattern_cache();
|
if ( is_array( $pattern_data ) ) {
|
||||||
if ( is_array( $pattern_data ) ) {
|
if ( $can_use_cached ) {
|
||||||
return $pattern_data;
|
return $pattern_data;
|
||||||
}
|
}
|
||||||
|
// If in development mode, clear pattern cache.
|
||||||
|
$theme->delete_pattern_cache();
|
||||||
}
|
}
|
||||||
|
|
||||||
$dirpath = $theme->get_stylesheet_directory() . '/patterns/';
|
$dirpath = $theme->get_stylesheet_directory() . '/patterns/';
|
||||||
|
@ -18,7 +18,6 @@ class Tests_Blocks_WpGetBlockPatterns extends WP_UnitTestCase {
|
|||||||
*
|
*
|
||||||
* @param string $theme The theme's slug.
|
* @param string $theme The theme's slug.
|
||||||
* @param array $expected The expected pattern data.
|
* @param array $expected The expected pattern data.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
public function test_should_return_block_patterns( $theme, $expected ) {
|
public function test_should_return_block_patterns( $theme, $expected ) {
|
||||||
$patterns = _wp_get_block_patterns( wp_get_theme( $theme ) );
|
$patterns = _wp_get_block_patterns( wp_get_theme( $theme ) );
|
||||||
@ -118,4 +117,37 @@ class Tests_Blocks_WpGetBlockPatterns extends WP_UnitTestCase {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that _wp_get_block_patterns() clears existing transient when in theme development mode.
|
||||||
|
*
|
||||||
|
* @ticket 59591
|
||||||
|
*/
|
||||||
|
public function test_should_clear_existing_transient_when_in_development_mode() {
|
||||||
|
$theme = wp_get_theme( 'block-theme-patterns' );
|
||||||
|
|
||||||
|
// Calling the function should set the cache.
|
||||||
|
_wp_get_block_patterns( $theme );
|
||||||
|
$this->assertSameSets(
|
||||||
|
array(
|
||||||
|
'cta.php' => array(
|
||||||
|
'title' => 'Centered Call To Action',
|
||||||
|
'slug' => 'block-theme-patterns/cta',
|
||||||
|
'description' => '',
|
||||||
|
'categories' => array( 'call-to-action' ),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
$theme->get_pattern_cache(),
|
||||||
|
'The transient for block theme patterns should be set'
|
||||||
|
);
|
||||||
|
|
||||||
|
// Calling the function while in theme development mode should clear the cache.
|
||||||
|
$GLOBALS['_wp_tests_development_mode'] = 'theme';
|
||||||
|
_wp_get_block_patterns( $theme );
|
||||||
|
unset( $GLOBALS['_wp_tests_development_mode'] ); // Reset to not pollute other tests.
|
||||||
|
$this->assertFalse(
|
||||||
|
$theme->get_pattern_cache(),
|
||||||
|
'The transient for block theme patterns should have been cleared due to theme development mode'
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user