Important note: This project was first started before the Gutenberg feature plugin was started. As such, the JS Widgets plugin should now be considered a prototype which may inform the way that widget blocks get implemented in Gutenberg. This plugin will no longer be actively developed.
Also could be known as Widget Customizer 2.0, Widgets 3.0, or Widgets Next Generation.
Warning: The APIs provided by this plugin are still in flux. If creating new widgets that extend the WP_JS_Widget
class, please look at the changelog and ensure compatibility with your extended widgets before deploying.
This plugin implements:
Features:
encoded_serialized_instance
anywhere to be seen.update-widget
Ajax request can be eliminated since the JS control can directly manipulate the widget instance data.WP_JS_Widget
will editable from both the customizer and the widgets admin page using the same Form
JS interface. This Form
is also able to be embedded in other contexts, like on the frontend and as a Shortcake (Shortcode UI) form. See #11.validate
and sanitize
methods that work on the instance array as a whole.WP_Error
from its validate
or sanitize
method. For example, the RSS widget will show an error message if the feed URL provided is invalid and the widget will block from saving until the URL is corrected.js-widgets/v1
namespace, for example to list all Recent Posts widgets via the /js-widgets/v1/widgets/recent-posts
or to get the Text widget with the “ID” (number) of 6, /js-widgets/v1/widgets/text/6
.widget_{id_base}[{number}]
) are directly mutated via JavaScript instead of needing to do an update-widget
Admin Ajax roundtrip; this greatly speeds up previewing.WP_JS_Widget
API.This plugin doesn’t yet implement any widgets that use JS templating for frontend rendering of the widgets. For that, please see the Next Recent Posts Widget plugin.
Limitations/Caveats:
WP_JS_Widget
will be exposed via the REST API. The plugin includes a WP_JS_Widget
adapter class which demonstrates how to adapt existing WP_Widget
classes for the new widget functionality.