Make WordPress Core

Changeset 56931


Ignore:
Timestamp:
10/13/2023 04:44:09 PM (3 years ago)
Author:
flixos90
Message:

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.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/block-patterns.php

    r56771 r56931  
    351351                        }
    352352
     353                        $file_path = $dirpath . $file;
     354
     355                        if ( ! file_exists( $file_path ) ) {
     356                                _doing_it_wrong(
     357                                        __FUNCTION__,
     358                                        sprintf(
     359                                                /* translators: %s: file name. */
     360                                                __( 'Could not register file "%s" as a block pattern as the file does not exist.' ),
     361                                                $file
     362                                        ),
     363                                        '6.4.0'
     364                                );
     365                                $theme->delete_pattern_cache();
     366                                continue;
     367                        }
     368
    353369                        // The actual pattern content is the output of the file.
    354370                        ob_start();
    355                         include $dirpath . $file;
     371                        include $file_path;
    356372                        $pattern_data['content'] = ob_get_clean();
    357373                        if ( ! $pattern_data['content'] ) {
     
    409425        $can_use_cached = ! wp_is_development_mode( 'theme' );
    410426
    411         if ( $can_use_cached ) {
    412                 $pattern_data = $theme->get_pattern_cache();
    413                 if ( is_array( $pattern_data ) ) {
     427        $pattern_data = $theme->get_pattern_cache();
     428        if ( is_array( $pattern_data ) ) {
     429                if ( $can_use_cached ) {
    414430                        return $pattern_data;
    415431                }
     432                // If in development mode, clear pattern cache.
     433                $theme->delete_pattern_cache();
    416434        }
    417435
  • trunk/tests/phpunit/tests/blocks/wpGetBlockPatterns.php

    r56771 r56931  
    1919         * @param string $theme    The theme's slug.
    2020         * @param array  $expected The expected pattern data.
    21 
    2221         */
    2322        public function test_should_return_block_patterns( $theme, $expected ) {
     
    119118                );
    120119        }
     120
     121        /**
     122         * Tests that _wp_get_block_patterns() clears existing transient when in theme development mode.
     123         *
     124         * @ticket 59591
     125         */
     126        public function test_should_clear_existing_transient_when_in_development_mode() {
     127                $theme = wp_get_theme( 'block-theme-patterns' );
     128
     129                // Calling the function should set the cache.
     130                _wp_get_block_patterns( $theme );
     131                $this->assertSameSets(
     132                        array(
     133                                'cta.php' => array(
     134                                        'title'       => 'Centered Call To Action',
     135                                        'slug'        => 'block-theme-patterns/cta',
     136                                        'description' => '',
     137                                        'categories'  => array( 'call-to-action' ),
     138                                ),
     139                        ),
     140                        $theme->get_pattern_cache(),
     141                        'The transient for block theme patterns should be set'
     142                );
     143
     144                // Calling the function while in theme development mode should clear the cache.
     145                $GLOBALS['_wp_tests_development_mode'] = 'theme';
     146                _wp_get_block_patterns( $theme );
     147                unset( $GLOBALS['_wp_tests_development_mode'] ); // Reset to not pollute other tests.
     148                $this->assertFalse(
     149                        $theme->get_pattern_cache(),
     150                        'The transient for block theme patterns should have been cleared due to theme development mode'
     151                );
     152        }
    121153}
Note: See TracChangeset for help on using the changeset viewer.