この記事は、当サイトの運営者が実際にlazyblocks.comへ問い合わせ、開発元からの回答を受けた上で執筆しています。開発元の発言として引用している部分と、当サイトが実機で確認した内容は本文中で区別しています。
Lazy Blocksでブロックを作るとき、コントロールの設定画面ではなく、記事本文に直接ブロックのJSONコメント(<!-- wp:lazyblock/xxx {...} /-->)を手で書くことがあります。その際、Repeater(繰り返し)系のコントロールを使うブロックで、値を正しく設定したはずなのにフロント表示が空になる、という現象に遭遇しました。実際に開発元(lazyblocks.com)に問い合わせて原因を確認できたので、症状・原因・正しい書き方をまとめます。
先に結論だけ書くと、これはLazy Blocks Pro本体の広範な不具合ではありません。通常どおりブロックエディタ(Gutenberg)でブロックを編集・保存している限り発生しません。この記事が対象にしているのは、ブロックのJSONを手作業で本文に埋め込んでいる人(このサイトで紹介しているような自作ブロックの運用をしている方)向けの注意点です。
症状
Repeaterコントロール(コントロール一覧の詳細はLazy Blocks使い方完全ガイドを参照)を使ったブロックで、本文にこのようなブロックコメントを直接書いたとします。
動かない書き方(生のJSON配列をそのまま埋め込んだ例):
<!-- wp:lazyblock/my-block {"my_repeater":[{"text":"a"},{"text":"b"}]} /-->
この状態で保存・公開すると、ブロックのPHP側では$attributes['my_repeater']が空として扱われ、リピーターの中身が何も出力されません。エディタのプレビューでも実際のフロント表示でも同様に空になります。
原因(開発元に確認済み)
lazyblocks.comのサポートに問い合わせたところ、次のような回答をいただきました(要約)。
- Repeater系のコントロールは、ブロックの属性スキーマ上
type: "string"として登録されている - 本文のブロックコメントにその値を生のJSON配列として書くと、WordPress標準の属性バリデーションが型不一致とみなして値を破棄し、空のデフォルト値に置き換えてしまう
- ブロックエディタで通常に作成・保存した場合は、エディタ側が正しくJSON文字列としてエンコードしてから保存するため、この問題は起きない
つまり原因は、Lazy Blocks Pro側の恒常的な不具合というより、Repeaterの値をブロックコメントに直接手書きする際のJSONの書式(生配列 vs エンコード済み文字列)にありました。
正しい書き方
Repeaterの値は、配列そのものではなく、JSONエンコードしてエスケープした文字列として書きます。
<!-- wp:lazyblock/my-block {"my_repeater":"[{\"text\":\"a\"},{\"text\":\"b\"}]"} /-->
my_repeaterの値がダブルクォートで囲まれた1つの文字列になっており、内部の"は\"でエスケープされている点がポイントです。この形式であれば、通常のブロックエディタで保存した場合と同じ構造になり、正しくレンダリングされます。
すでに空表示になってしまったページがある場合
開発元によると、該当ページをブロックエディタで一度開いて再保存するだけで直るとのことです(エディタが正しい形式で保存し直してくれるため)。本サイトでは、検証用に作成したテストページのみでこの症状を確認しており、検証後にすべて削除済みです。本番公開中の記事でこの症状が出ているものは確認していません。
今後の修正予定
開発元は、エンコード済み文字列と生配列の両方を受け付けるよう、Repeaterコントロール側の受け入れ範囲を広げる修正を既に用意しており、テスト付きで次回リリースへの反映を予定しているとのことです(nk-crew/lazy-blocks PR #377)。リリースされ次第、本記事も更新します。
今回の内容は2026-07-22に開発元サポート窓口(lazyblocks.com/support/)へ報告し、同日中に回答をいただいた内容に基づいています。
💡 この記事で触れたLazy BlocksのRepeaterブロックも、実際にはすべてLazy Blocks(Pro)で自作できます。 作り方はこちら
