带有三个特定内部块的审查卡块: 标题( 核心/职务 ) 评级块(我们也会制作) 摘录( 核心/后摘录 )
评级块将: 对帖子(或CPT)进行评级,从一颗星到五星或红心 使用帖子元存储评分 使用Post Query块中的块显示每个帖子的评级。
设置多块插件
脚手架插件文件
/** *插件名称:Post Review Blocks *描述:使用“创建块”工具构建的块示例。 *要求至少:6.1 *需要PHP:7.0 *版本:0.1.0 *作者:WordPress贡献者 *许可证:GPL-2.0或激光 *许可证URI: https://www.gnu.org/licenses/gpl-2.0.html *文本域:审阅后块 * *@包CreateBlock */ if(!defined('ABSPATH')){ 退出;// 如果直接访问,则退出。 } 函数create_block_post_review_blocks_block_init(){ 寄存器块类型(__DIR__.'/内部版本); } add_action('init','create_block_post_review_blocks_block_init');
-建造/ -型钢混凝土/ -.editorconfig(编辑配置) -.gitignore(.git忽略) -.package-lock.json文件 -.package.json文件 -事后审查-blocks.php -自述.md
用脚手架固定砌块
npx@wordpress/ create-block@最新 审查卡块--无插件 npx@wordpress/ create-block@最新 额定块--无插件--变量动态
额定块 审查卡块
进入 块.json 的文件 额定块 并更改“ 偶像 “属性来自” 笑脸 “至” 星形填充的 ”. 在这两个 块.json 文件,添加“ 关键字 “属性 “keywords”:[“rating”,“review”] 。用户在搜索时会发现新块更容易。 在 事后审查-blocks.php 文件,更新 创建块_发布_查看_块_块_输入 注册两个块,如下所示:
函数create_block_post_review_blocks_block_init(){ 寄存器块类型(__DIR__.'/build/rating-block'); 寄存器块类型(__DIR__.'/build/review-card-block'); } add_action('init','create_block_post_review_blocks_block_init');
构建块并激活插件
注册post meta
//添加一些帖子元数据 函数寄存器_review_rating_post_meta(){ $post_meta=数组( “_rating”=>数组(“type”=>“integer”), “_ratingStyle”=>数组(“type”=>“string”), ); foreach($post_meta作为$meta_key=>$args){ 注册表_成本_元数据( '帖子', $meta_key, 阵列( “show_in_rest”=>真, “single”=>真, “type”=>$args['type'], “auth_callback”=>函数(){ return current_user_can('edit_posts'); } ) ); } } add_action('init','register_review_rating_post_meta');
_额定值 _评分方式
构建评级块
演示如何保存和从post meta中提取 允许在查询循环发布模板中使用发布元数据
员工目录 电子邮件 或 位置 元 图书目录 额定值 或 国际标准图书编号 元 配方索引 美味 或 准备时间(_T) 元
添加基本CSS
.wp块创建块评级块{ 填充:1rem 0; } .wp-block-create-block-rating-block跨度额定星{ 颜色:黄色; } .wp-block-create-block-rating-block跨度.rating-heart{ 颜色:红色; }
将属性和usesContext添加到block.json文件
“usesContext”:[“postId”,“postType”], “属性”:{ “评级”:{ “type”:“integer”, “默认”:5 }, “评级风格”:{ “type”:“字符串”, “default”:“star” } }, “示例”:{ “属性”:{ “评级”:4, “ratingStyle”:“明星” } }
使用上下文 :允许我们获取帖子的ID和类型的值 属性 :标识要保存在块上的属性 例子 :预览块在添加时的外观
更新edit.js文件
导入和分配 检索和存储post meta的功能 带有编辑器侧栏中组件的Return方法
从“@wordpress/i18n”导入{__}; 从“@wordpress/element”导入{useEffect}; 从“@wordpress/block-editor”导入{useBlockProps、InspectorControls}; 从“@wordpress/components”导入{PanelBody、RangeControl、SelectControl}; 从“@wordpress/core-data”导入{useEntityProp}; 导入“./editor.scss”;
__ 是我们的国际化方法 使用效果 允许您更新元数据 使用块属性 提供了要使用的块特性 检查员控制 允许您将控件添加到Inspector侧栏 面板主体 , RangeControl(范围控制) 、和 选择控制 是为块属性设置用户控件的所有组件 使用实体属性 提供对post元的访问 最后,导入SCSS文件
导出默认函数Edit({ 属性:{rating,ratingStyle}, 集合属性, 上下文:{postType,postId}, } ) { const[meta,updateMeta]=使用实体属性( “postType”, 职位类型, “元”, postId, ); //在此处添加功能代码 //在此处添加return()方法 //其他代码将放在这里,不要忘记或删除右花括号! }
额定值 和 评级风格 传入并分配给属性状态对象 集合属性 是用于 属性 状态对象得到更新 postType(后类型) 和postId与上下文一起从 使用上下文 您在上面定义的
使用效果(()=>{ const initStyle=元_ 评级风格? 元_ 评级风格:“星型”; 集合属性({ 评级:meta_ 评级||0, 评级样式:initStyle, }); }, []); const onChangeRating=(val)=>{ 更新Meta({ …元, _额定值:val, }); 集合属性({ 额定值:val }); }; const onChangeRatingStyle=(val)=>{ updateMeta(更新元数据)({ …元, _评级风格:val, }); 集合属性({ 评级风格:val }); }; const getRatingEmojis=()=>{ 让ratingEmojis=“”; for(设i=0;i<额定值;i++){ ratingEmojis+=ratingStyle===“明星”? " ⭐ " : " ❤️ "; } 回报率Emojis; };
使用效果 负载运行(假设第二个参数为 [] )并检查存储的post meta中的值并为其赋值 额定值 和 评级风格 ,默认为星号( ⭐) 更改额定值 将在检查器中更改评级值时更新评级值 更改分级样式 对 评级风格 获取分级表情 是一个循环,用于返回分级的正确星星或红心的数量和样式。
返回( <> <检验员控制> <PanelBody title={__(“评级”,“多块插件”)}> <范围控制 label={__(“分级”,“多块插件”)} 值={rating} onChange={onChangeRating} 最小值={1} 最大值={5} /> <选择控制 label={__(“分级样式”,“多块插件”)} onChange={onChangeRatingStyle} value={ratingStyle} 选项={[ { 标签:__(“Star”,“multiblock-plugin”), 值:“star”, }, { 标签:__(“心脏”,“多块plugin”), 值:“心”, }, ] } /> </PanelBody> </InspectorControls> <div{…useBlockProps()}> <p> <strong>评分:</strong>{“”} <span className={`rating-${ratingStyle}`}>{getRatingEmoji()}</span> </p> </div> </> );
. The
更新render.php文件
<? php(电话) 全球$post; $ratingEmojis=''; //从帖子元数据获取评级和评级样式 $rating=get_post_meta(get_the_ID(),'_rating',true); $ratingStyle=get_post_meta(get_the_ID(),'_ratingStle',true); //如果未设置分级样式,则默认为星形 if(!$ratingStyle){ $ratingStyle='star'; } //生成分级表情。 对于($i=0;$i<$rating;$i++){ $rating表情符号=$ ratingStyle===“星型”?” ⭐️' : ' ❤️'; } ?> <p<? php echo get_block_wrapper_attributes();?>> <? php echo wp_kses_post('<strong>评级:</strong><span class=“Rating-'.$ratingStyle.'”>'.$ratingEmojis.'</span>','multiblock-plugin');?> </p>
这是在帖子的上下文中出现的,因此我们可以使用 获取ID() 块使用类和其他属性包装 获取块包装属性()
构建审查卡块
将特定块指定为评审卡的“内部块” 仅允许评审卡中的某些区块 限制此卡的使用位置,即作为Query Loop块中的post模板
更新block.json文件
“父级”:[“核心/后模板”], “允许的块”:[ “核心/职务”, “创建块/分级块”, “核心/文章摘要” ]
edit.js中的InnerBlocks
从“@wordpress/i18n”导入{__}; 从“@wordpress/block-editor”导入{InnerBlocks,使用BlockProps}; 导入“./editor.scss”; 常量REVIEW_TEMPLATE=[ [“核心/文章标题”,{isLink:true,占位符:“文章标题”}], [“创建块/评级块”,{}], [“核心/后摘录”,{占位符:“姿势内容…”}], ]; 导出默认函数Edit(){ return<InnerBlocks template={REVIEW_template}templateLock=“all”/>; }
isLink(isLink) 设置为 真的 ,这意味着标题是可以点击的,它会带你进入帖子 占位符 如果,出于某种原因,没有标题
编辑save.js文件
从“@wordpress/block-editor”导入{InnerBlocks,使用BlockProps}; 导出默认函数save({attributes}){ 返回( <div{…useBlockProps.save()}> <内部块。 内容/> </div> ); }
测试块
点击帖子模板中的标题栏,使其高亮显示 然后单击插入器(蓝色的“+”按钮)并搜索查看卡块 一旦您在列表中看到它,单击它并返回到列表视图,在那里您应该可以看到评审卡块
限制额定值块的使用
函数limit_rating_block_to_post_type($allowed_block-types,$editor_context){ //在帖子编辑器中只允许使用段落、标题、列表和分级块。 if('post'===$editor_context->post->post_type){ 返回数组( “核心/段落”, '核心/标题', '核心/列表', '创建块/评级块' ); } 返回$allowed_block_types; } 添加过滤器('allowed_block_types_all','limit_rating_block_to_post_type',10,2);