カテゴリー
コンピュータ

WordPressのブロック(gutenberg)を正規表現で置き換え

やりたいこと

FancyBox で画像を拡大させるため画像へのリンクを付けたい

やること

すべての画像ブロックをリンク無し「none」 から メディアファイルにリンク「media」に置き換えをする

やってみた

ブロックの構造の把握

まず置き換えたいブロックの構造を理解する
今回置き換えたい画像ブロックのコードを読む↓
gutenberg/packages/block-library/src/image/save.js at trunk · WordPress/gutenberg

<!-- wp:image {"id":80,"sizeSlug":"full","linkDestination":"none"} -->
<figure class="wp-block-image size-full"><img src="http://localhost/wordpress/wp-content/uploads/2023/01/Bucket-Details.png" alt="" class="wp-image-80"/></figure>
<!-- /wp:image -->

↑初期状態で画像ブロックを挿入した場合のブロック

<!-- wp:image {"id":80,"sizeSlug":"full","linkDestination":"media"} -->
<figure class="wp-block-image size-full"><a href="http://localhost/wordpress/wp-content/uploads/2023/01/Bucket-Details.png"><img src="http://localhost/wordpress/wp-content/uploads/2023/01/Bucket-Details.png" alt="" class="wp-image-80"/></a></figure>
<!-- /wp:image -->

↑画像ブロックにメディアにリンクを付けた場合のブロック

attribute のlinkDestinationを変更し 内部のHTMLは 画像にリンクを付ければ良いことがわかる

置き換え

置き換えをするプラグインは実積のあるSearch Regexを使うことにした

置き換えたいブロックに対応した正規表現(PHPでの置き換え)を書く

Note that Search Regex uses PHP’s regular expressions.

https://searchregex.com/support/regular-expression/
WordPress Search Regex Group replace
WordPress Search Regex Group replace

検索 のフラグで [正規表現] を指定し キャプチャグループで必要なものを抜き出す

<!-- wp:image \{"id":(\d+),"sizeSlug":"full","linkDestination":"none"} -->\n<figure class="wp-block-image size-full"><img src="(.+?)" alt="" class="wp-image-(\d+)"\/><\/figure>\n<!-- \/wp:image -->

 操作で[全体の文字置換]を指定

置換 [単一行]にし 改行には改行文字(\n)を入れる

キャプチャは \n 形式または $n 形式で参照を指定することができる

<!-- wp:image {"id":\1,"sizeSlug":"full","linkDestination":"media"} -->\n<figure class="wp-block-image size-full"><a href="\2"><img src="\2" alt="" class="wp-image-\3"/></a></figure>\n<!-- /wp:image -->

検索 でプレビューを見て置き換えを確認し すべて置き換えで 置き換えを実行し完了

注意

ダイナミックブロックであれば attribute を書き換えれば再レンダリングされるが、普通のブロックの場合 attribute と中身(html)を適切に書き換えないと ブロックが壊れる

WordPress Block This block contains unexpected or invalid content
WordPress Block This block contains unexpected or invalid content

参考

コメントを残す