拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Gutenberg MainDashboardButton SlotFill 实战指南:定制文章编辑器顶栏的返回按钮

Gutenberg MainDashboardButton SlotFill 实战指南定制文章编辑器顶栏的返回按钮【免费下载链接】gutenbergThe Block Editor project for WordPress and beyond. Plugin is available from the official repository.项目地址: https://gitcode.com/GitHub_Trending/gu/gutenbergMainDashboardButton源码内部称为BackButton是 Gutenberg 在文章编辑器Post Editor顶栏暴露的一个 SlotFill 扩展点用于替换编辑器进入全屏模式后返回 wp-admin 控制台的默认按钮W 图标。本指南以 docs/reference-guides/slotfills/main-dashboard-button.md 为骨架结合wordpress/edit-post、wordpress/editor的源码实现讲解该 SlotFill 的定义、注册流程与两种实战用法更换图标、更换图标与链接帮助读者在插件中安全地接管这一头部入口。SlotFill 机制速览理解插槽与填充在进入MainDashboardButton之前需要先理解 Gutenberg 的 Slot/Fill 扩展机制。Slot与Fill是一对配套组件允许开发者把一段 React UI 渲染到元素树中的其他位置即常说的 portal 渲染模式是实现组件可扩展性的通用模式一个Slot可被应用中不同位置注册的多个Fill同时占据。详细的组件说明见 packages/components/src/slot-fill/README.md。为简化使用wordpress/components提供了createSlotFill( slotName )辅助方法一次返回配对的{ Fill, Slot }。例如const { Fill, Slot } createSlotFill( Toolbar );而在 SlotFills 体系中接入这些扩展点必须借助 wordpress/plugins 包提供的registerPluginAPI 来注册插件。标准接入流程共四步详见 docs/reference-guides/slotfills/README.md从wordpress/plugins导入registerPlugin方法从对应的包中导入需要的 SlotFill 组件定义一个组件将我们的自定义内容包在 SlotFill 组件内调用registerPlugin注册该插件。MainDashboardButton 是什么根据官方文档main-dashboard-button.md该插槽用于替换文章编辑器中默认的主控制台按钮即顶栏左侧的 W 图标按钮它的职责是让用户在全屏编辑模式下返回 wp-admin 主控制台自WordPress 6.2 起该插槽在站点编辑器Site Editor中不再可用仅作用于文章编辑器该 SlotFill 仍标记为实验性experimentalAPI 可能在未来发生变化。注意除MainDashboardButton之外其余 SlotFill 在文章编辑器与站点编辑器中均同时可用参见 slotfills/README.md 中的说明这是本插槽的一个显著差异点。源码视角MainDashboardButton 是如何被定义与挂载的1. 插槽定义于wordpress/editor核心实现位于 packages/editor/src/components/header/back-button.jsx。该文件完整展示了插槽的定义方式// 为向后兼容而保留的旧名称 const slotName __experimentalMainDashboardButton; export const useHasBackButton () { const fills useSlotFills( slotName ); return Boolean( fills fills.length ); }; const { Fill, Slot } createSlotFill( slotName ); const BackButton Fill; const BackButtonSlot () { const fills useSlotFills( slotName ); return ( Slot bubblesVirtually fillProps{ { length: ! fills ? 0 : fills.length } } / ); }; BackButton.Slot BackButtonSlot; export default BackButton;从中可以提炼出三个关键实现事实插槽名称__experimentalMainDashboardButton注释明确说明这是为向后兼容而保留的旧名称useHasBackButton暴露了一个 Hook通过useSlotFills( slotName )判断当前是否已有填充项供编辑器其他部分感知插槽占用状态fillProps传递lengthSlot通过fillProps把当前已注册的填充数量传给每个Fill的 render props这个数量在默认回退按钮的渲染逻辑中会被用到见下文bubblesVirtually为true填充内容通过 React portal 渲染事件沿虚拟的 React 元素层级冒泡并保留 Fill 自身的 React context。2. 经wordpress/edit-post的私有 API 导出在 packages/edit-post/src/index.jsx 中BackButton从wordpress/editor的私有 API 解锁后被重命名并导出const { BackButton: __experimentalMainDashboardButton, registerCoreBlockBindingsSources, } unlock( editorPrivateApis );并在同文件第 313 行对外导出export { __experimentalMainDashboardButton };这就是示例代码中import { __experimentalMainDashboardButton as MainDashboardButton } from wordpress/edit-post的来源。3. 插槽挂载于编辑器头部骨架BackButton.Slot /被渲染在编辑器的头部骨架中见 packages/editor/src/components/header/header-skeleton.jsx。所有通过该插槽注册的填充项最终都会出现在这一位置。4. 默认回退按钮的渲染条件Gutenberg 本身也会通过该插槽注册默认的返回按钮实现在 packages/edit-post/src/components/back-button/index.jsxBackButtonFill { ( { length } ) length 1 ( motion.div variants{ slideX } transition{ { type: tween, delay: 0.8 } } FullscreenModeClose showTooltip{ ! showIconLabels } initialPost{ initialPost } / /motion.div ) } /BackButtonFill这段代码有两个值得注意的细节length 1条件fillProps中的length在这里发挥了作用——当已注册填充数量不超过 1 时默认按钮才会渲染。也就是说一旦第三方插件注册了自己的填充项默认按钮便不会再显示从而实现了替换效果默认按钮附带滑动slideX动效并遵循用户显示图标标签showIconLabels的偏好设置。核心组件FullscreenModeClose 的 props 解析两个示例都用到的FullscreenModeClose是默认返回按钮的实际渲染组件packages/edit-post/src/components/back-button/fullscreen-mode-close.jsx。它接收以下 propsProp类型说明默认行为icon图标组件按钮图标未传入时使用chevronLeftRTL 环境下为chevronRighthref字符串点击后跳转的链接未传入时自动生成edit.php?post_type当前文章类型showTooltip布尔是否显示提示气泡—initialPost对象初始文章对象用于确定文章类型为空时取当前文章类型getCurrentPostType底层逻辑对应源码 fullscreen-mode-close.jsx通过useSelect从wordpress/editor的getCurrentPostType与wordpress/core-data的getPostType获取当前文章类型对象若文章类型不存在则返回null按钮不渲染链接优先级显式传入的href 基于当前文章类型生成的edit.php?post_type...列表页链接使用addQueryArgs拼接按钮标签优先取文章类型的labels.view_items否则回退为__( Back )返回。理解这些默认行为有助于在自定义填充时只覆盖需要的部分例如仅换图标其余行为沿用默认值。示例一更换图标第一个示例将顶栏的 W 图标按钮替换为关闭close图标。完整代码import { registerPlugin } from wordpress/plugins; import { __experimentalMainDashboardButton as MainDashboardButton } from wordpress/edit-post; import { close } from wordpress/icons; const MainDashboardButtonTest () ( MainDashboardButton FullscreenModeClose icon{ close } / /MainDashboardButton ); registerPlugin( main-dashboard-button-test, { render: MainDashboardButtonTest, } );要点说明__experimentalMainDashboardButton使用as别名导入便于代码阅读icon{ close }直接覆盖图标而href未传因此点击仍会跳转到当前文章类型的列表页即默认的返回行为插件名称main-dashboard-button-test需保持全局唯一按前文源码逻辑一旦该填充注册成功编辑器自带的默认按钮length 1条件不再满足便不再渲染。示例二更换图标与链接第二个示例不仅更换图标还把点击行为改为跳转到外部站点此处为 https://wordpress.orgimport { registerPlugin } from wordpress/plugins; import { __experimentalFullscreenModeClose as FullscreenModeClose, __experimentalMainDashboardButton as MainDashboardButton, } from wordpress/edit-post; import { external } from wordpress/icons; const MainDashboardButtonIconTest () ( MainDashboardButton FullscreenModeClose icon{ external } hrefhttps://wordpress.org / /MainDashboardButton ); registerPlugin( main-dashboard-button-icon-test, { render: MainDashboardButtonIconTest, } );要点说明这里同时从wordpress/edit-post导入了__experimentalFullscreenModeClose组件对应源码 packages/edit-post/src/components/back-button/fullscreen-mode-close.jsxhref为显式传入的外部链接因此会覆盖默认的edit.php列表页地址external图标外链箭头与跳转到外部站点的语义高度契合若省略href则回到示例一的默认返回行为这验证了FullscreenModeClose中显式href优先的设计。使用注意事项与兼容性实验性 API文档明确标注该 SlotFill 仍处于实验阶段__experimentalMainDashboardButton与__experimentalFullscreenModeClose的命名与行为均可能随版本调整插件升级时需留意 Gutenberg 发布说明仅限文章编辑器自 WordPress 6.2 起该插槽在站点编辑器中不可用若插件需同时覆盖站点编辑器场景请评估其他方案必须配合registerPluginSlotFill 内容只有通过wordpress/plugins注册的插件形式渲染才会被Slot收集脱离插件体系直接渲染不会生效图标来源于wordpress/iconsclose、external、chevronLeft等图标均来自该包选用前请确认版本已包含所需图标默认按钮的让位逻辑默认按钮仅在填充数量 1时渲染back-button/index.jsx因此注册自定义填充即可完成替换无需额外移除默认按钮的操作。小结MainDashboardButton是 Gutenberg SlotFill 体系中一个目标明确、实现精简的扩展点从createSlotFill(__experimentalMainDashboardButton)的定义back-button.jsx到BackButton.Slot挂载于编辑器头部header-skeleton.jsx再到FullscreenModeClose提供可覆盖的icon/href等 props整条链路清晰可查。掌握本指南中的两种示例仅换图标、换图标加链接即可在插件中灵活定制文章编辑器顶栏的返回入口同时规避实验性 API 的常见坑点。【免费下载链接】gutenbergThe Block Editor project for WordPress and beyond. Plugin is available from the official repository.项目地址: https://gitcode.com/GitHub_Trending/gu/gutenberg创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门