如何修复WordPress自定义Swiper区块的验证错误?
排查
create-block/swiper区块验证失败(images数组为空)问题 核心问题定位
区块验证失败的本质是save函数生成的HTML与数据库中存储的区块数据不匹配,当前报错指向images数组在save输出中为空,说明save函数未正确读取到区块属性里的images数据,或属性传递环节存在问题。
分步排查与修复
1. 检查block.json中的attributes定义
确保images属性的类型、默认值和结构定义正确,这是数据传递的基础:
"attributes": { "images": { "type": "array", "default": [], "items": { "type": "object", "properties": { "url": { "type": "string" }, "alt": { "type": "string" }, "id": { "type": "number" } } } } }
- 必须显式设置
default: [],避免未赋值时出现undefined - 明确items的属性结构,确保与edit中存储的图片数据结构一致
2. 验证save.js中对images的读取逻辑
确认save函数正确从attributes中获取images数组,避免拼写错误或解构错误:
export default function save({ attributes }) { // 确保正确解构images const { images } = attributes; return ( <div className="swiper-container"> <div className="swiper-wrapper"> {/* 先判断数组非空,避免空数组或undefined引发渲染错误 */} {images.length > 0 && images.map((image, index) => ( <div key={image.id || index} className="swiper-slide"> <img src={image.url} alt={image.alt || ''} /> </div> ))} </div> </div> ); }
- 优先用
image.id作为key,比index更稳定 - 不要直接遍历可能为空的数组,先做长度判断
3. 对齐edit.js与save.js的数据处理逻辑
检查edit.js中是否正确将选中的图片数据存入attributes:
// 示例:MediaUpload组件的onSelect逻辑 const onSelectImages = (selectedImages) => { // 转换为符合attributes结构的数组 const formattedImages = selectedImages.map(img => ({ url: img.url, alt: img.alt || '', id: img.id })); setAttributes({ images: formattedImages }); };
- 确保edit中存储的images数组结构和block.json定义完全一致
- 避免在edit中修改images结构后,save中未做对应处理
4. 对比数据库与save输出的差异
查看文章post_content中存储的区块原始数据,比如:
...
将这段数据中的images数组和save函数生成的HTML对比,确认:
- 数据库中是否存在有效的images数据
- save函数是否正确读取并渲染了这些数据
内容的提问来源于stack exchange,提问作者Illia Yalovoi
相关产品推荐
相关产品推荐

