diff --git src/wp-admin/js/widgets/media-gallery-widget.js src/wp-admin/js/widgets/media-gallery-widget.js
index 7d0d191c20..ebba81cf86 100644
|
|
|
201 | 201 | }); |
202 | 202 | |
203 | 203 | mediaFrameProps = control.mapModelToMediaFrameProps( control.model.toJSON() ); |
204 | | selection.gallery = new Backbone.Model( _.pick( mediaFrameProps, 'columns', 'link', 'size', '_orderbyRandom' ) ); |
| 204 | selection.gallery = new Backbone.Model( mediaFrameProps ); |
205 | 205 | if ( mediaFrameProps.size ) { |
206 | 206 | control.displaySettings.set( 'size', mediaFrameProps.size ); |
207 | 207 | } |
diff --git src/wp-includes/widgets/class-wp-widget-media-gallery.php src/wp-includes/widgets/class-wp-widget-media-gallery.php
index 3ac9cc910c..13ee9c2d6e 100644
|
|
class WP_Widget_Media_Gallery extends WP_Widget_Media { |
46 | 46 | * @return array Schema for properties. |
47 | 47 | */ |
48 | 48 | public function get_instance_schema() { |
49 | | return array( |
| 49 | $schema = array( |
50 | 50 | 'title' => array( |
51 | 51 | 'type' => 'string', |
52 | 52 | 'default' => '', |
… |
… |
class WP_Widget_Media_Gallery extends WP_Widget_Media { |
87 | 87 | 'should_preview_update' => false, |
88 | 88 | ), |
89 | 89 | ); |
| 90 | |
| 91 | /** This filter is documented in wp-includes/widgets/class-wp-widget-media.php */ |
| 92 | $schema = apply_filters( "widget_{$this->id_base}_instance_schema", $schema, $this ); |
| 93 | |
| 94 | return $schema; |
90 | 95 | } |
91 | 96 | |
92 | 97 | /** |
… |
… |
class WP_Widget_Media_Gallery extends WP_Widget_Media { |
100 | 105 | public function render_media( $instance ) { |
101 | 106 | $instance = array_merge( wp_list_pluck( $this->get_instance_schema(), 'default' ), $instance ); |
102 | 107 | |
103 | | $shortcode_atts = array( |
104 | | 'ids' => $instance['ids'], |
105 | | 'columns' => $instance['columns'], |
106 | | 'link' => $instance['link_type'], |
107 | | 'size' => $instance['size'], |
| 108 | $shortcode_atts = array_merge( |
| 109 | $instance, |
| 110 | array( |
| 111 | 'link' => $instance['link_type'], |
| 112 | ) |
108 | 113 | ); |
109 | 114 | |
110 | 115 | // @codeCoverageIgnoreStart |
diff --git src/wp-includes/widgets/class-wp-widget-media.php src/wp-includes/widgets/class-wp-widget-media.php
index 4d190da360..ec412d25f7 100644
|
|
abstract class WP_Widget_Media extends WP_Widget { |
127 | 127 | * @return array Schema for properties. |
128 | 128 | */ |
129 | 129 | public function get_instance_schema() { |
130 | | return array( |
| 130 | $schema = array( |
131 | 131 | 'attachment_id' => array( |
132 | 132 | 'type' => 'integer', |
133 | 133 | 'default' => 0, |
… |
… |
abstract class WP_Widget_Media extends WP_Widget { |
149 | 149 | 'should_preview_update' => false, |
150 | 150 | ), |
151 | 151 | ); |
| 152 | |
| 153 | /** |
| 154 | * Filters the media widget instance schema to add additional properties. |
| 155 | * |
| 156 | * @since 4.9.0 |
| 157 | * |
| 158 | * @param array $schema Instance schema. |
| 159 | * @param WP_Widget_Media $this Widget object. |
| 160 | */ |
| 161 | $schema = apply_filters( "widget_{$this->id_base}_instance_schema", $schema, $this ); |
| 162 | |
| 163 | return $schema; |
152 | 164 | } |
153 | 165 | |
154 | 166 | /** |
diff --git tests/phpunit/tests/widgets/media-widget.php tests/phpunit/tests/widgets/media-widget.php
index 6620101a2f..f30d56e6f3 100644
|
|
class Test_WP_Widget_Media extends WP_UnitTestCase { |
164 | 164 | $this->assertEquals( $result, 'foo ibar NO' ); |
165 | 165 | } |
166 | 166 | |
| 167 | /** |
| 168 | * Instance schema args. |
| 169 | * |
| 170 | * @var array |
| 171 | */ |
| 172 | protected $filter_instance_schema_args; |
| 173 | |
| 174 | /** |
| 175 | * Filter instance schema. |
| 176 | * |
| 177 | * @param array $schema Schema. |
| 178 | * @param WP_Widget_Media $widget Widget. |
| 179 | * |
| 180 | * @return array |
| 181 | */ |
| 182 | public function filter_instance_schema( $schema, $widget ) { |
| 183 | $this->filter_instance_schema_args = compact( 'schema', 'widget' ); |
| 184 | $schema['injected'] = array( |
| 185 | 'type' => 'boolean', |
| 186 | ); |
| 187 | return $schema; |
| 188 | } |
| 189 | |
167 | 190 | /** |
168 | 191 | * Test get_instance_schema method. |
169 | 192 | * |
… |
… |
class Test_WP_Widget_Media extends WP_UnitTestCase { |
178 | 201 | 'title', |
179 | 202 | 'url', |
180 | 203 | ), array_keys( $schema ) ); |
| 204 | |
| 205 | // Check filter usage. |
| 206 | $this->filter_instance_schema_args = null; |
| 207 | add_filter( 'widget_mocked_instance_schema', array( $this, 'filter_instance_schema' ), 10, 2 ); |
| 208 | $schema = $widget->get_instance_schema(); |
| 209 | $this->assertInternalType( 'array', $this->filter_instance_schema_args ); |
| 210 | $this->assertSame( $widget, $this->filter_instance_schema_args['widget'] ); |
| 211 | $this->assertEqualSets( array( 'attachment_id', 'title', 'url' ), array_keys( $this->filter_instance_schema_args['schema'] ) ); |
| 212 | $this->assertArrayHasKey( 'injected', $schema ); |
181 | 213 | } |
182 | 214 | |
183 | 215 | /** |