內容簡介
重要提示:此項目是在 Gutenberg 功能外掛之前開始的。因此,現在應將 JS Widgets 外掛視為原型,它可能影響 widget blocks 在 Gutenberg 中的實現方式。此外,此外掛將不再進行主動開發。
也可稱為 Widget Customizer 2.0,Widgets 3.0 或 Widgets Next Generation。
警告:此外掛提供的 API 仍在變動中。如果創建延伸 WP_JS_Widget 類的新小工具,請查看變更日誌,並確保與延伸小工具兼容,再部署。
此外掛實現了以下功能:
WP-CORE#33507:允許小工具控制以 JS 驅動。
WP-CORE#35574:將 REST API JSON schema 資訊添加到 WP_Widget。
WP-API#19:在 WP REST API 中添加 widget 儲存和檢索端點。
功能:
與 Shortcake(Shortcode UI)結合,使所有 JS widgets 可作為編輯器中的文章元素使用。
在 PHP 中,自定義器中的小工具實例設定已導出為常規 JSON,而沒有任何 PHP 序列化的 base64 編碼的 encoded_serialized_instance。
在自定義器中預覽小工具變更更快,因為可以消除 update-widget Ajax 請求,因為 JS 控件可以直接操作小工具實例資料。
小工具的控制表單使用 JS 內容模板而不是 PHP 來渲染每個控制的標記,降低自定義器負載的重量,特別是在使用大量小工具時。
將擴展 WP_JS_Widget 的小工具在自定義器和小工具管理頁面上都可以進行編輯,使用相同的表格 JS 介面。此表單還可嵌入其他內容,例如在前端以及 Shortcake(Shortcode UI)表單上。請參閱#11。
小工具使用 REST API 中的 JSON Schema 定義包含實例屬性驗證和清潔的實例,除了還提供在對整個實例數組進行驗證和清潔的方法以外。
小工具實例可以因其 validate 或 sanitize 方法返回 WP_Error 而被阻止保存。例如,如果所提供的 RSS 小工具的 RSS 首頁 URL 無效,則會顯示錯誤訊息且該小工具將阻止保存,直到 URL 正確。
小工具在 js-widgets/v1 命名空間下公開,例如通過 /js-widgets/v1/widgets/recent-posts 列出所有最新文章小工具,或通過 /js-widgets/v1/widgets/text/6 獲取 ID(數字)為 6 的 Text 小工具。
自定義器對小工具實例的設定(widget_{id_base} [{number}])通過 JavaScript 直接變異,而不需要進行 update-widget 管理 Ajax 往返。這大大加速了預覽。
小工具控制表單可擴展以使用任何用於管理 UI 的 JS 框架,允許使用 Backbone、React 或任何其他前端技術。
兼容存儲在選項而不是自定義文章類型中的小工具,通過 Customize Widgets Plus 外掛中的 Widget Posts 模組。
兼容 WooCommerce 小工具、BBPress 小工具等常見 WordPress 外掛。
外掛標籤
開發者團隊
原文外掛簡介
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:
WP-CORE#33507: Allow widget controls to be JS-driven.
WP-CORE#35574: Add REST API JSON schema information to WP_Widget.
WP-API#19: Add widget endpoints to the WP REST API.
Features:
Integrates with Shortcake (Shortcode UI) to allow all JS widgets to be made available as Post Elements in the editor.
Widget instance settings in the Customizer are exported from PHP as regular JSON without any PHP-serialized base64-encoded encoded_serialized_instance anywhere to be seen.
Previewing widget changes in the customizer is faster since the update-widget Ajax request can be eliminated since the JS control can directly manipulate the widget instance data.
Widgets control forms use JS content templates instead of PHP to render the markup for each control, reducing the weight of the customizer load, especially when there are a lot of widgets in use.
Widgets that extend 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.
Widgets employ the JSON Schema from the REST API to define an instance with validation and sanitization of the instance properties, beyond also providing validate and sanitize methods that work on the instance array as a whole.
A widget instance can be blocked from being saved by returning a 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.
Widgets are exposed under the 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.
Customizer settings for widget instances (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.
Widget control forms can be extended to employ any JS framework for managing the UI, allowing Backbone, React, or any other frontend technology to be used.
Compatible with widgets stored in a custom post type instead of options, via the Widget Posts module in the Customize Widgets Plus plugin.
Compatible with Customize Snapshots, allowing changes made in the Customizer to be applied to requests for widgets via the REST API.
Includes adaptations of all core widgets using the new WP_JS_Widget API.
The adapted core widgets include additional raw data in their REST API item responses so that JS can render them client-side.
The Notifications API is utilized to display warnings when a user attempts to provide markup in a core widget title or illegal HTML in a Text widget’s content.
The Pages widget in Core is enhanced to make use of Customize Object Selector if available to display a Select2 UI for selecting pages to exclude instead of providing page IDs.
An bonus bundled plugin provides a “Post Collection” widget which, if the Customize Object Selector plugin is installed, will provide a UI for curating an arbitrary list of posts to display.
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:
Only widgets that extend 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.
