PluginProbe
Gutenberg / 10.5.2
Gutenberg v10.5.2
23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 7.4.0 All 402 releases
gutenberg / lib / widgets-customize.php

widgets-customize.php in Gutenberg 10.5.2, at lib/widgets-customize.php

142 lines 4.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Bootstrapping the Gutenberg widgets editor in the customizer.
4 *
5 * @package gutenberg
6 */
7
8 /**
9 * Gutenberg's Customize Register.
10 *
11 * Adds a section to the Customizer for editing widgets with Gutenberg.
12 *
13 * @param \WP_Customize_Manager $manager An instance of the class that controls most of the Theme Customization API for WordPress 3.4 and newer.
14 */
15 function gutenberg_widgets_customize_register( $manager ) {
16 global $wp_registered_sidebars;
17
18 if ( ! gutenberg_use_widgets_block_editor() ) {
19 return;
20 }
21
22 require_once __DIR__ . '/class-wp-sidebar-block-editor-control.php';
23
24 foreach ( $manager->sections() as $section ) {
25 if ( $section instanceof WP_Customize_Sidebar_Section ) {
26 $section->description = '';
27 }
28 }
29 foreach ( $manager->controls() as $control ) {
30 if (
31 $control instanceof WP_Widget_Area_Customize_Control ||
32 $control instanceof WP_Widget_Form_Customize_Control
33 ) {
34 $manager->remove_control( $control->id );
35 }
36 }
37
38 foreach ( $wp_registered_sidebars as $sidebar_id => $sidebar ) {
39 $manager->add_setting(
40 "sidebars_widgets[$sidebar_id]",
41 array(
42 'capability' => 'edit_theme_options',
43 'transport' => 'postMessage',
44 )
45 );
46
47 $manager->add_control(
48 new WP_Sidebar_Block_Editor_Control(
49 $manager,
50 "sidebars_widgets[$sidebar_id]",
51 array(
52 'section' => "sidebar-widgets-$sidebar_id",
53 'settings' => "sidebars_widgets[$sidebar_id]",
54 'sidebar_id' => $sidebar_id,
55 )
56 )
57 );
58 }
59 }
60
61 /**
62 * Swaps the customizer setting's sanitize_callback and sanitize_js_callback
63 * arguments with our own implementation that adds raw_instance to the sanitized
64 * value. This is only done if the widget has declared that it supports raw
65 * instances via the show_instance_in_rest flag. This lets the block editor use
66 * raw_instance to create blocks.
67 *
68 * When merged to Core, these changes should be made to
69 * WP_Customize_Widgets::sanitize_widget_instance and
70 * WP_Customize_Widgets::sanitize_widget_js_instance.
71 *
72 * @param array $args Array of Customizer setting arguments.
73 * @param string $id Widget setting ID.
74 */
75 function gutenberg_widgets_customize_add_unstable_instance( $args, $id ) {
76 if ( preg_match( '/^widget_(?P<id_base>.+?)(?:\[(?P<widget_number>\d+)\])?$/', $id, $matches ) ) {
77 $id_base = $matches['id_base'];
78
79 $args['sanitize_callback'] = function( $value ) use ( $id_base ) {
80 global $wp_customize;
81
82 if ( isset( $value['raw_instance'] ) ) {
83 $widget_object = gutenberg_get_widget_object( $id_base );
84 if ( ! empty( $widget_object->show_instance_in_rest ) ) {
85 return $value['raw_instance'];
86 }
87 }
88
89 return $wp_customize->widgets->sanitize_widget_instance( $value );
90 };
91
92 $args['sanitize_js_callback'] = function( $value ) use ( $id_base ) {
93 global $wp_customize;
94
95 $sanitized_value = $wp_customize->widgets->sanitize_widget_js_instance( $value );
96
97 $widget_object = gutenberg_get_widget_object( $id_base );
98 if ( ! empty( $widget_object->show_instance_in_rest ) ) {
99 $sanitized_value['raw_instance'] = (object) $value;
100 }
101
102 return $sanitized_value;
103 };
104 }
105
106 return $args;
107 }
108
109 /**
110 * Initialize the Gutenberg customize widgets page.
111 */
112 function gutenberg_customize_widgets_init() {
113 $settings = array_merge(
114 gutenberg_get_default_block_editor_settings(),
115 gutenberg_get_legacy_widget_settings()
116 );
117
118 // This purposefully does not rely on apply_filters( 'block_editor_settings', $settings, null );
119 // Applying that filter would bring over multitude of features from the post editor, some of which
120 // may be undesirable. Instead of using that filter, we simply pick just the settings that are needed.
121 $settings = gutenberg_experimental_global_styles_settings( $settings );
122 $settings = gutenberg_extend_block_editor_styles( $settings );
123
124 gutenberg_initialize_editor(
125 'widgets_customizer',
126 'customize-widgets',
127 array(
128 'editor_settings' => $settings,
129 )
130 );
131 wp_enqueue_script( 'wp-customize-widgets' );
132 wp_enqueue_style( 'wp-customize-widgets' );
133 wp_enqueue_script( 'wp-format-library' );
134 wp_enqueue_style( 'wp-format-library' );
135 }
136
137 if ( gutenberg_is_experiment_enabled( 'gutenberg-widgets-in-customizer' ) ) {
138 add_action( 'customize_register', 'gutenberg_widgets_customize_register' );
139 add_filter( 'widget_customizer_setting_args', 'gutenberg_widgets_customize_add_unstable_instance', 10, 2 );
140 add_action( 'customize_controls_enqueue_scripts', 'gutenberg_customize_widgets_init' );
141 }
142