WordPress Version: 6.4
/**
* Returns the contextualized block editor settings for a selected editor context.
*
* @since 5.8.0
*
* @param array $custom_settings Custom settings to use with the given editor type.
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
*
* @return array The contextualized block editor settings.
*/
function get_block_editor_settings(array $custom_settings, $block_editor_context)
{
$editor_settings = array_merge(get_default_block_editor_settings(), array('allowedBlockTypes' => get_allowed_block_types($block_editor_context), 'blockCategories' => get_block_categories($block_editor_context)), $custom_settings);
$global_styles = array();
$presets = array(array('css' => 'variables', '__unstableType' => 'presets', 'isGlobalStyles' => true), array('css' => 'presets', '__unstableType' => 'presets', 'isGlobalStyles' => true));
foreach ($presets as $preset_style) {
$actual_css = wp_get_global_stylesheet(array($preset_style['css']));
if ('' !== $actual_css) {
$preset_style['css'] = $actual_css;
$global_styles[] = $preset_style;
}
}
if (wp_theme_has_theme_json()) {
$block_classes = array('css' => 'styles', '__unstableType' => 'theme', 'isGlobalStyles' => true);
$actual_css = wp_get_global_stylesheet(array($block_classes['css']));
if ('' !== $actual_css) {
$block_classes['css'] = $actual_css;
$global_styles[] = $block_classes;
}
/*
* Add the custom CSS as a separate stylesheet so any invalid CSS
* entered by users does not break other global styles.
*/
$global_styles[] = array('css' => wp_get_global_styles_custom_css(), '__unstableType' => 'user', 'isGlobalStyles' => true);
} else {
// If there is no `theme.json` file, ensure base layout styles are still available.
$block_classes = array('css' => 'base-layout-styles', '__unstableType' => 'base-layout', 'isGlobalStyles' => true);
$actual_css = wp_get_global_stylesheet(array($block_classes['css']));
if ('' !== $actual_css) {
$block_classes['css'] = $actual_css;
$global_styles[] = $block_classes;
}
}
$editor_settings['styles'] = array_merge($global_styles, get_block_editor_theme_styles());
$editor_settings['__experimentalFeatures'] = wp_get_global_settings();
// These settings may need to be updated based on data coming from theme.json sources.
if (isset($editor_settings['__experimentalFeatures']['color']['palette'])) {
$colors_by_origin = $editor_settings['__experimentalFeatures']['color']['palette'];
$editor_settings['colors'] = isset($colors_by_origin['custom']) ? $colors_by_origin['custom'] : (isset($colors_by_origin['theme']) ? $colors_by_origin['theme'] : $colors_by_origin['default']);
}
if (isset($editor_settings['__experimentalFeatures']['color']['gradients'])) {
$gradients_by_origin = $editor_settings['__experimentalFeatures']['color']['gradients'];
$editor_settings['gradients'] = isset($gradients_by_origin['custom']) ? $gradients_by_origin['custom'] : (isset($gradients_by_origin['theme']) ? $gradients_by_origin['theme'] : $gradients_by_origin['default']);
}
if (isset($editor_settings['__experimentalFeatures']['typography']['fontSizes'])) {
$font_sizes_by_origin = $editor_settings['__experimentalFeatures']['typography']['fontSizes'];
$editor_settings['fontSizes'] = isset($font_sizes_by_origin['custom']) ? $font_sizes_by_origin['custom'] : (isset($font_sizes_by_origin['theme']) ? $font_sizes_by_origin['theme'] : $font_sizes_by_origin['default']);
}
if (isset($editor_settings['__experimentalFeatures']['color']['custom'])) {
$editor_settings['disableCustomColors'] = !$editor_settings['__experimentalFeatures']['color']['custom'];
unset($editor_settings['__experimentalFeatures']['color']['custom']);
}
if (isset($editor_settings['__experimentalFeatures']['color']['customGradient'])) {
$editor_settings['disableCustomGradients'] = !$editor_settings['__experimentalFeatures']['color']['customGradient'];
unset($editor_settings['__experimentalFeatures']['color']['customGradient']);
}
if (isset($editor_settings['__experimentalFeatures']['typography']['customFontSize'])) {
$editor_settings['disableCustomFontSizes'] = !$editor_settings['__experimentalFeatures']['typography']['customFontSize'];
unset($editor_settings['__experimentalFeatures']['typography']['customFontSize']);
}
if (isset($editor_settings['__experimentalFeatures']['typography']['lineHeight'])) {
$editor_settings['enableCustomLineHeight'] = $editor_settings['__experimentalFeatures']['typography']['lineHeight'];
unset($editor_settings['__experimentalFeatures']['typography']['lineHeight']);
}
if (isset($editor_settings['__experimentalFeatures']['spacing']['units'])) {
$editor_settings['enableCustomUnits'] = $editor_settings['__experimentalFeatures']['spacing']['units'];
unset($editor_settings['__experimentalFeatures']['spacing']['units']);
}
if (isset($editor_settings['__experimentalFeatures']['spacing']['padding'])) {
$editor_settings['enableCustomSpacing'] = $editor_settings['__experimentalFeatures']['spacing']['padding'];
unset($editor_settings['__experimentalFeatures']['spacing']['padding']);
}
if (isset($editor_settings['__experimentalFeatures']['spacing']['customSpacingSize'])) {
$editor_settings['disableCustomSpacingSizes'] = !$editor_settings['__experimentalFeatures']['spacing']['customSpacingSize'];
unset($editor_settings['__experimentalFeatures']['spacing']['customSpacingSize']);
}
if (isset($editor_settings['__experimentalFeatures']['spacing']['spacingSizes'])) {
$spacing_sizes_by_origin = $editor_settings['__experimentalFeatures']['spacing']['spacingSizes'];
$editor_settings['spacingSizes'] = isset($spacing_sizes_by_origin['custom']) ? $spacing_sizes_by_origin['custom'] : (isset($spacing_sizes_by_origin['theme']) ? $spacing_sizes_by_origin['theme'] : $spacing_sizes_by_origin['default']);
}
$editor_settings['__unstableResolvedAssets'] = _wp_get_iframed_editor_assets();
$editor_settings['__unstableIsBlockBasedTheme'] = wp_is_block_theme();
$editor_settings['localAutosaveInterval'] = 15;
$editor_settings['disableLayoutStyles'] = current_theme_supports('disable-layout-styles');
$editor_settings['__experimentalDiscussionSettings'] = array('commentOrder' => get_option('comment_order'), 'commentsPerPage' => get_option('comments_per_page'), 'defaultCommentsPage' => get_option('default_comments_page'), 'pageComments' => get_option('page_comments'), 'threadComments' => get_option('thread_comments'), 'threadCommentsDepth' => get_option('thread_comments_depth'), 'defaultCommentStatus' => get_option('default_comment_status'), 'avatarURL' => get_avatar_url('', array('size' => 96, 'force_default' => true, 'default' => get_option('avatar_default'))));
$post_content_block_attributes = wp_get_post_content_block_attributes();
if (isset($post_content_block_attributes)) {
$editor_settings['postContentAttributes'] = $post_content_block_attributes;
}
/**
* Filters the settings to pass to the block editor for all editor type.
*
* @since 5.8.0
*
* @param array $editor_settings Default editor settings.
* @param WP_Block_Editor_Context $block_editor_context The current block editor context.
*/
$editor_settings = apply_filters('block_editor_settings_all', $editor_settings, $block_editor_context);
if (!empty($block_editor_context->post)) {
$post = $block_editor_context->post;
/**
* Filters the settings to pass to the block editor.
*
* @since 5.0.0
* @deprecated 5.8.0 Use the {@see 'block_editor_settings_all'} filter instead.
*
* @param array $editor_settings Default editor settings.
* @param WP_Post $post Post being edited.
*/
$editor_settings = apply_filters_deprecated('block_editor_settings', array($editor_settings, $post), '5.8.0', 'block_editor_settings_all');
}
return $editor_settings;
}