介绍
代码语法
你要建造什么
能够添加和编辑所有核心块。 熟悉的视觉样式和主/侧栏布局。 基本 阻止页面重载之间的持久性。
插件设置和组织
插件.php –带有注释元数据的标准插件“条目”文件,需要 初始化.php . 初始.php –处理主插件逻辑的初始化。 型钢混凝土/ (目录)–这是JavaScript和CSS源文件所在的位置。 这些文件是 不 插件直接排队。 webpack.config.js –自定义Webpack配置扩展了 @wordpress/脚本 npm包允许自定义CSS样式(通过Sass)。
编辑的“核心”
此模块允许您创建和使用独立的块编辑器。
创建自定义“块编辑器”页面
注册页面
//文件:init.php 添加菜单页面( “独立块编辑器”,//可见页面名称 “块编辑器”,//菜单标签 “edit_posts”,//所需功能 “getdavesbe”,//挂钩/页面slug “getdave_sbe_render_block_editor”,//用于呈现页面的函数 'dashicons-welcome-widgets-menus'//自定义图标 );
添加目标HTML
//文件:init.php 函数getdave_sbe_render_block_editor(){ ?> <迪夫 id=“getdave sbe块编辑器” class=“getdave-sbe-block-editor” > 正在加载编辑器。。。 </div> <? php(电话) }
排队JavaScript和CSS
//文件:init.php 函数getdave_sbe_block_editor_init($hook){ //如果页面不正确,请退出。 if('toplevel_page_getdavesbe'!==$hook){ 回报; } } add_action(“admin_enqueue_scripts”,“getdave_sbe_block_editor_init”);
//文件:init.php wp_enqueue_script($script_handle、$script_url、$script_asset['dependencies']、$script_asset['版本']);
//文件:init.php //排队默认编辑器样式。 wp_enqueue_style(“wp-format-library”); //加入自定义样式。 wp_排队_样式( 'getdave sbe styles',//句柄 plugins_url('build/index.css',__FILE__),//块编辑器css 数组(“wp-edit-blocks”),//在其后面包含CSS的依赖项 文件时间(__DIR__.'/build/index.css') );
内联编辑器设置
//文件:init.php //获取自定义编辑器设置。 $设置=获取dave_sbe_get_block_editor_settings(); //内联所有设置。 wp_add_inline_script($script_handle,'window.getdaveBeSettings='.wp_json_encode($settings).';');
注册和渲染自定义块编辑器
//文件:src/index.js //外部依赖性。 从“react-dom”导入{createRoot}; //WordPress依赖项。 从“@wordpress/dom-ready”导入domReady; 从“@wordpress/block-library”导入{registerCoreBlocks}; //内部依赖性。 从“导入编辑器”/ 编辑器'; 导入”/ styles.scss’;
从中获取编辑器设置 window.getdaveSBe设置 (以前从PHP内联)。 使用注册所有核心WordPress块 寄存器核心块 . 呈现 <编辑器> 组件进入等待 <div> 在自定义管理页面上。
domReady(函数(){ const root=createRoot(document.getElementById('getdave-sbe-block-editor')); const设置=window.getdaveBeSettings|{}; 寄存器核心块(); 根.根.根( <编辑器设置={settings}/> ); } );
查看<Editor>组件
依赖关系
//文件:src/editor.js 从“组件/通知”导入通知; 从“components/Header”导入Header; 从“组件/侧边栏”导入侧边栏; 从“components/block-editor”导入BlockEditor;
编辑器渲染
//文件:src/editor.js 函数编辑器({settings}){ 返回( <DropZone提供程序> <div className=“getdavesbe-block-editor-layot”> <通知/> <标题/> <提要栏/> <BlockEditor设置={settings}/> </div> </DropoZoneProvider> ); }
<DropZone提供程序> –支持使用 拖放功能的dropzone <通知> –提供“快餐店”通知,如果向 核心/通知 商店 <标题> –在编辑器UI顶部呈现静态标题“独立块编辑器” <块编辑器> –自定义块编辑器组件
键盘导航
//文件:src/editor.js 导出默认导航区域(编辑器);
自定义<BlockEditor>
//文件:src/components/block-editor/index.js 返回( <div className=“getdavesbe-block-editor”> <区块编辑器提供程序 值={块} onInput={updateBlocks} onChange={persistBlocks} settings={settings} > <提要栏。 检验员填充> <块检查器/> </提要栏。 检验员填充> <BlockCanvas height=“400px”/> </BlockEditorProvider> </div> );
了解<BlockEditorProvider>组件
//文件:src/components/block-editor/index.js <块编辑器提供程序 value={blocks}//块对象数组 onInput={updateBlocks}//管理块更新的处理程序 onChange={persistBlocks}//管理块更新/持久性的处理程序 settings={settings}//编辑器“settings”对象 />
块编辑器
道具
将状态中的当前块数组存储为 阻碍 . 更新 阻碍 内存状态打开 onInput(输入) 通过调用hook setter
updateBlocks(块) . 将块的基本持久性处理为 本地存储 使用 onChange(更改时) 。这是 当块更新被视为“已提交”时激发 .
了解<BlockList>组件
如何 阻止列表
工作?
//伪代码仅供示例使用。 <区块列表> /*呈现rootClientId中的块列表*/ <块列表块> /*渲染块列表中的单个块*/ <块编辑> /*渲染块的标准可编辑区域*/ <Component/>/*呈现由其“edit()”实现定义的块UI。 */ </BlockEdit> </BlockListBlock> </阻止列表>
查看侧边栏
//文件:src/components/block-editor/index.js 返回( <div className=“getdavesbe块编辑器”> <块编辑器提供程序> <提要栏。 检验员填充>/*<--SIDEBAR*/ <块检查器/> </边栏。 检验员填充> <BlockCanvas height=“400px”/> </BlockEditorProvider> </div> );
<提要栏。 检验员填充> <块检查器/> </提要栏。 检验员填充>
//文件:src/editor.js <通知/> <标题/> <提要栏/>//<--这是什么? <BlockEditor设置={settings}/>
块持久性
存储处于状态的块
//文件:src/components/block editor/index.js const[blocks,updateBlocks]=useState([]);
保存块数据
//文件:src/components/block-editor/index.js 函数persistBlocks(newBlocks){ updateBlocks(newBlocks); window.localStorage.setItem('getdavesbeBlocks',序列化(newBlocks)); }
<!-- wp:标题--> <h2>WordPress管理员中独立块编辑器的实验</h2> <!-- / wp:标题--> <!-- wp:段落--> <p>这是一个实验,旨在发现在WordPress管理中创建块编辑器的独立实例有多容易(或其他)</ p>(第页) <!-- / wp:段落-->
检索以前的块数据
//文件:src/components/block-editor/index.js 使用效果(()=>{ const storedBlocks=window.localStorage.getItem('getdavesbeBlocks'); if(存储块&&storedBlocks.length){ updateBlocks(()=>解析(storedBlocks)); createInfoNotice(“加载的块”{ type:“snackbar”, isDismissible:正确, } ); } }, [] );
从本地存储中获取序列化块数据。 使用 parse() 实用程序。 调用状态设置器 updateBlocks(更新块) 导致 阻碍 要在状态中更新的值,以反映从LocalStorage检索到的块。