PluginProbe
Gutenberg / 10.4.1
Gutenberg v10.4.1
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.4.1, at lib/widgets-customize.php

113 lines 3.3 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 if ( gutenberg_is_experiment_enabled( 'gutenberg-widgets-in-customizer' ) ) {
110 add_action( 'customize_register', 'gutenberg_widgets_customize_register' );
111 add_filter( 'widget_customizer_setting_args', 'gutenberg_widgets_customize_add_unstable_instance', 10, 2 );
112 }
113