diff --git a/lib/widget-preview-template.php b/lib/widget-preview-template.php
new file mode 100644
index 0000000000000..1f74627c97cc1
--- /dev/null
+++ b/lib/widget-preview-template.php
@@ -0,0 +1,44 @@
+
+
+>
+
+
+
+ get_registered( 'core/legacy-widget' );
+ echo $block->render( $_GET['widgetPreview'] );
+ ?>
+
+
+
+
+
+
diff --git a/lib/widgets.php b/lib/widgets.php
index a53c870715920..8f88883a21ad4 100644
--- a/lib/widgets.php
+++ b/lib/widgets.php
@@ -323,3 +323,24 @@ function gutenberg_register_widgets() {
}
add_action( 'widgets_init', 'gutenberg_register_widgets' );
+
+/**
+ * Overwrites the template WordPress would use to render the currrent request,
+ * to a widget preview template if widgetPreview parameter was passed in the url.
+ *
+ * @param string $template Original template.
+ *
+ * @return string The original or the path of widget-preview-template.php file.
+ */
+function change_post_template_to_widget_preview( $template ) {
+ if (
+ isset( $_GET['widgetPreview'] ) &&
+ current_user_can( 'edit_theme_options' )
+ ) {
+ add_filter( 'show_admin_bar', '__return_false' );
+ return dirname( __FILE__ ) . '/widget-preview-template.php';
+ }
+ return $template;
+}
+add_filter( 'template_include', 'change_post_template_to_widget_preview' );
+
diff --git a/package-lock.json b/package-lock.json
index ca1fc68cf374f..3b882d659ec8b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17466,6 +17466,7 @@
"@wordpress/notices": "file:packages/notices",
"@wordpress/plugins": "file:packages/plugins",
"@wordpress/server-side-render": "file:packages/server-side-render",
+ "@wordpress/url": "file:packages/url",
"classnames": "^2.2.5",
"lodash": "^4.17.19",
"rememo": "^3.0.0"
diff --git a/packages/edit-widgets/package.json b/packages/edit-widgets/package.json
index f98eabf233038..b81a316a335b4 100644
--- a/packages/edit-widgets/package.json
+++ b/packages/edit-widgets/package.json
@@ -49,6 +49,7 @@
"@wordpress/notices": "file:../notices",
"@wordpress/plugins": "file:../plugins",
"@wordpress/server-side-render": "file:../server-side-render",
+ "@wordpress/url": "file:../url",
"classnames": "^2.2.5",
"lodash": "^4.17.19",
"rememo": "^3.0.0"
diff --git a/packages/edit-widgets/src/blocks/legacy-widget/edit/index.js b/packages/edit-widgets/src/blocks/legacy-widget/edit/index.js
index a7dd12a799148..0863ed992d8b4 100644
--- a/packages/edit-widgets/src/blocks/legacy-widget/edit/index.js
+++ b/packages/edit-widgets/src/blocks/legacy-widget/edit/index.js
@@ -11,7 +11,6 @@ import { Button, PanelBody, ToolbarGroup } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
import { withSelect } from '@wordpress/data';
import { BlockControls, InspectorControls } from '@wordpress/block-editor';
-import ServerSideRender from '@wordpress/server-side-render';
import { update } from '@wordpress/icons';
/**
@@ -19,6 +18,7 @@ import { update } from '@wordpress/icons';
*/
import LegacyWidgetEditHandler from './handler';
import LegacyWidgetPlaceholder from './placeholder';
+import WidgetPreview from './widget-preview';
class LegacyWidgetEdit extends Component {
constructor() {
@@ -188,15 +188,12 @@ class LegacyWidgetEdit extends Component {
}
renderWidgetPreview() {
- const { widgetId, attributes } = this.props;
+ const { attributes, widgetAreaId } = this.props;
return (
-