<!-- wp:feedwright/when {"expression":"{{post_raw.post_status|map:trash=1,*=}}"} -->
<!-- wp:feedwright/element {"tagName":"mdf:deleted","contentMode":"empty"} /-->
<!-- /wp:feedwright/when -->
<!-- wp:feedwright/when {"expression":"{{post_raw.post_status|map:trash=1,*=}}","negate":true} -->
<!-- wp:feedwright/element {"tagName":"title","contentMode":"binding","bindingExpression":"{{post.post_title}}"} /-->
<!-- wp:feedwright/element {"tagName":"description","contentMode":"cdata-binding","bindingExpression":"{{post.post_content}}"} /-->
<!-- /wp:feedwright/when -->
背景
mediba
<mdf:deleted/>のような 「特定条件のときだけ別の要素群を出力したい」 仕様要件に対応する手段が現状ない。feedwright/elementは無条件出力なので、削除通知 / 期限切れ / sticky 専用要素 / 言語別要素などのケースで詰まる。汎用の wrapper ブロック
feedwright/whenを 1 つ追加して、内部のバインディング式を解決した結果が空かどうかで子ブロックの出力可否を切り替えるのが本 issue のスコープ。期待
expressionを解決:結果が空文字列以外なら「条件成立」とみなすnegate: trueのときは判定を反転(空のとき子ブロックを出力)feedwright/element/feedwright/raw/feedwright/comment/feedwright/sub-query/ さらに入れ子のfeedwright/whenを許可設計
新ブロック
feedwright/whenfeedwright/channel/feedwright/item/feedwright/sub-item/feedwright/element(children モード) のいずれかの子。ancestor: ['feedwright/rss']制約で全文脈に対応expression: string(解決対象のバインディング式)negate: boolean(default false)label: string(任意、エディタ表示用ラベル)feedwright/element、feedwright/raw、feedwright/comment、feedwright/sub-query、feedwright/whenRenderer 側
Renderer\WhenRendererを新設、render(array $block, Context $ctx): array<DOMNode>を実装Resolverでexpressionを解決'' === $value)とnegateを XORElementRenderer::render_child()で展開し全 DOMNode を集めて返すElementRenderer::render_child()にfeedwright/whenディスパッチを追加(既存array<DOMNode>戻り値の枠に乗せる)Renderer::render_uncached()の channel ループにも分岐を追加Editor UI
expressionを BindingInput で編集negateトグルwhen [expression]のような薄い枠、内部の InnerBlocks受け入れ基準
feedwright/whenブロックが登録され、channel/item/sub-item/element(children)配下で挿入可能expressionが空でない値に解決されたとき、子ブロックの DOMNode が出力されるnegate: trueのとき判定が反転するfeedwright/whenの入れ子(when の中に when)が動作する{{post.*}}が正しく解決されるexpression真偽 / negate / 入れ子 / item context 内/外 を網羅docs/requirements.md§12(block specs)にfeedwright/when章を追加、§13(renderer)に WhenRenderer の説明を追加composer phpcs) パス影響範囲
blocks/when/{block.json,index.js,edit.js}src/Renderer/WhenRenderer.phpsrc/Renderer/ElementRenderer.php(render_child のディスパッチ)src/Renderer/Renderer.php(channel ループのディスパッチ)src/BlockRegistry.php(BLOCK_DIRS に 'when' 追加)blocks/{channel,item,sub-item,element}/edit.js(allowed children に 'feedwright/when' 追加)tests/Unit/、tests/Integration/RenderTest.php、tests/Integration/BlockRegistrationTest.phpdocs/requirements.mdlanguages/関連
item-queryでtrashステータスを許可する話)と組み合わせて、mediba<mdf:deleted/>の運用パターンが完成する