Closed ligne13 closed 1 year ago
We are seeing this also on WordPress 6.3 and narrowed it down to a check for theme.json
here:
https://github.com/WordPress/wordpress-develop/blob/6.3/src/wp-includes/class-wp-theme-json-resolver.php#L242-L243
Since theme_file_path
discards the filename, but is_readable()
still is true because the directory is readable, we end up with the error.
Full stack trace for us:
#00 /wp-includes/class-wp-theme-json-resolver.php(110): wp_json_file_decode('/wp-content/themes/sage/resources', ['associative' => true])
#01 /wp-includes/class-wp-theme-json-resolver.php(244): read_json_file('/wp-content/themes/sage/resources')
#02 /wp-includes/class-wp-theme-json-resolver.php(591): get_theme_data()
#03 /wp-includes/global-styles-and-settings.php(80): get_merged_data('theme')
#04 /wp-includes/block-supports/typography.php(500): wp_get_global_settings()
#05 /wp-includes/class-wp-theme-json.php(1696): wp_get_typography_font_size_value(...)
#06 /wp-includes/class-wp-theme-json.php(1773): get_settings_values_by_slug(...)
#07 /wp-includes/class-wp-theme-json.php(1516): compute_preset_vars(...)
#08 /wp-includes/class-wp-theme-json.php(1072): get_css_variables(...)
#09 /wp-includes/global-styles-and-settings.php(206): get_stylesheet(...)
#10 /wp-includes/script-loader.php(2467): wp_get_global_stylesheet()
#11 /wp-includes/class-wp-hook.php(310): wp_enqueue_global_styles('')
#12 /wp-includes/class-wp-hook.php(334): apply_filters(NULL, [0 => ''])
#13 /wp-includes/plugin.php(517): do_action([0 => ''])
#14 /wp-includes/script-loader.php(2225): do_action('wp_enqueue_scripts')
#15 /wp-includes/class-wp-hook.php(310): wp_enqueue_scripts('')
#16 /wp-includes/class-wp-hook.php(334): apply_filters(NULL, [0 => ''])
#17 /wp-includes/plugin.php(517): do_action([0 => ''])
#18 /wp-content/themes/sage/app/filters.php(96): do_action('wp_head')
#19 /wp-content/themes/sage/vendor/illuminate/collections/Traits/EnumeratesValues.php(245): App\{closure}('wp_head', 1)
#20 /wp-content/themes/sage/app/filters.php(102): each(Closure::__set_state(array()))
#21 /wp-includes/class-wp-hook.php(310): App\{closure}('/wp-content/themes/sage/resources/views/single-work.blade.php')
#22 /wp-includes/plugin.php(205): apply_filters('/wp-content/themes/sage/resources/views/single-work.blade.php', array(0 => '/wp-content/themes/sage/resources/views/single-work.blade.php',))
#23 /wp-includes/template-loader.php(104): apply_filters('template_include', '/wp-content/themes/sage/resources/views/single-work.blade.php')
#24 /wp-blog-header.php(19): require_once('/wp-includes/template-loader.php')
#25 /index.php(17): require('/wp-blog-header.php')
A quickfix I used was changing it to:
foreach (['theme_file_path', 'theme_file_uri', 'parent_theme_file_path', 'parent_theme_file_uri'] as $hook) {
add_filter($hook, function ($path) {
if (is_file($path)) {
return $path;
}
return dirname($path);
});
}
@oxyc Thanks ! I also had to create a dummy theme.json file inside the resources directory with just an empty object:
resources/theme.json
{}
Version
9.0.9
What did you expect to happen?
I expect my old theme built with Sage 9 to work with the latest version of Wordpress 6.3.
What actually happens?
The theme works but I get a Notice message on the page :
Notice: Error when decoding a JSON file at path /wp-content/themes/sage/resources : Syntax error in /wp-includes/functions.php on line 4579
The errors seems to come from the add_filter call in resources/functions.php:
array_map( 'add_filter', ['theme_file_path', 'theme_file_uri', 'parent_theme_file_path', 'parent_theme_file_uri'], array_fill(0, 4, 'dirname') );
This filter removes the file name from the theme_file_path variable (=> dirname).
Steps to reproduce
Use a Sage 9 theme with Wordpress 6.3.
System info
No response
Log output
No response
Please confirm this isn't a support request.
Yes