过滤器和挂钩

编辑器提供了许多过滤器和挂钩,允许您修改编辑体验。这里有一些。

编辑器设置

修改编辑器的最常见方法之一是通过块编辑器设置全部PHP过滤器,在设置发送到初始化的编辑器之前应用。

这个块编辑器设置全部hook将两个参数传递给回调函数:

以下示例为无法激活插件的用户(管理员)禁用代码编辑器。将其添加到插件或主题函数.php文件进行测试。

add_filter('block_editor_settings_all','example_restrict_code_editor');函数example_restrict_code_editor($settings){$can_active_plugins=current_user_can('激活_plugins');//为无法激活插件的用户(管理员)禁用代码编辑器。if(!$can_active_plugins){$settings['codeEditingEnabled']=false;}返回$settings;}

有关更多示例,请查看编辑器挂钩包含以下用例的文档:

服务器端theme.json过滤器

theme.json文件是控制接口选项的好方法,但它只允许全局或块级别的修改,这在某些情况下可能会受到限制。

例如,在上一节中,使用theme.json全局禁用了颜色和排版控件。但假设您想为管理员用户启用颜色设置。

为了提供更大的灵活性,WordPress 6.1引入了服务器端过滤器,允许您在四个不同的数据层自定义theme.json数据。

在下面的示例中,使用wp主题json数据主题过滤器。如果当前用户是管理员,则会恢复颜色控件。

//为除管理员以外的所有用户禁用颜色控件。函数示例filter_theme_json_data_theme($theme_json){$is_administrator=当前用户can('edit_theme_options');if($is_administrator){$new_data=数组(“版本”=>2,“settings”=>数组(“color”=>数组(“background”=>true,“自定义”=>true,“customDuotone”=>真,“customGradient”=>true,“defaultGradients”=>true,“defaultPalette”=>true,“text”=>真,),),);}返回$theme_json->update_with($new_data);}add_filter('wp_theme_json_data_theme','example_filter_theme.json_data_ttheme');

筛选器接收WP_Theme_JSON_Data类各层的数据。然后,将有效的类theme.json结构中的新数据传递给使用($new_data)更新方法。中需要一个theme.json版本号$新数据.

客户端(编辑器)筛选器

WordPress 6.2引入了一个新的客户端过滤器,允许您修改块级别theme.json设置渲染编辑器之前。

过滤器称为块编辑器.useSettings.before可以在JavaScript代码中使用,如下所示:

从“@wordpress/hooks”导入{addFilter};/***将Column块的间距选项限制为像素。*/添加筛选器(“blockEditor.useSetting.before”,'示例/useSetting.before',(settingValue、settingName、clientId、blockName)=>{if(blockName===‘核心/列’&&settingName====’间距单位’){返回['px'];}return settingValue;});

此示例将Column块的可用间距单位限制为像素。如上所述,可以使用theme.json过滤器应用类似的限制,也可以使用块级设置直接在主题的theme.jsen文件中应用。

然而块编辑器.useSettings.before过滤器是唯一的,因为它允许您根据块的位置、相邻块、当前用户的角色等修改设置。定制的可能性很大。

在下面的示例中,只要将标题块放置在Media&text块中,就会禁用标题块的文本颜色控件。

从“@wordpress/data”导入{select};从“@wordpress/hooks”导入{addFilter};/***当置于媒体和文本块内时,禁用标题块上的文本颜色控件。*/添加筛选器(“blockEditor.useSetting.before”,'示例/useSetting.before',(settingValue、settingName、clientId、blockName)=>{if(blockName===“核心/标题”){const{getBlockParents,getBlockName}=select('core/block-editor');const blockParents=getBlockParents(clientId,true);const inMediaText=blockParents.some((ancestorId)=>getBlockName(ancestorId)===“core/media-text”);if(inMediaText&&settingName===“color.text”){返回false;}}return settingValue;});

块过滤器

除了管理编辑器本身之外,还有许多方法可以修改单个块。也许您想禁用特定块支持,如背景色,或者定义默认情况下应在特定块上显示哪些设置。

最常用的过滤器之一是块类型元数据。它允许您筛选从块的块.json当使用PHP在服务器上注册块类型时,则返回文件。

过滤器采用一个参数:

  • $元数据(阵列)–元数据加载自块.json用于注册块类型。

这个$元数据数组包含您可能想了解的关于块的所有信息,包括块的描述和属性阻止支架.

在下面的示例中,标题块的背景色和渐变支持被禁用。

函数示例disable_heading_background_color_and_gradients($metadata){//仅将过滤器应用于标题块。if(!isset($metadata['name'])||'核心/标题'!==$元数据[“名称”]){返回$metadata;}//检查“supports”键是否存在。if(isset($metadata[“supports”])&&isset($metadata['“supports'][“color”])){//删除背景色和渐变支持。$metadata['supports']['color']['背景']=false;$metadata['supports']['color']['渐变']=false;}返回$metadata;}add_filter(“块类型元数据”,“示例禁用标题背景颜色和渐变色”);

您可以在中了解有关可用块过滤器的更多信息块过滤器文档。

其他资源