ブロックのマークアップを一部置換する【WordPress】

はじめに

WordPressのブロックエディタでは、ブロックに応じたマークアップが自動出力されます。

WEB制作の現場では、CSSやJSセレクタを指定するために、マークアップの一部変更が必要なケースがあります。

そのような場合に利用するコードを、今回の記事では紹介していきます。

やりたいこと

デフォルトのマークアップ(テーブル)

WordPressの記事編集ページでテーブルを作成すると、以下のようなマークアップが出力されます。

<figure class="wp-block-table">
    <table>
       <tbody>
          <tr>
              <td>aaa</td><td>bbb</td></tr><tr><td>ccc</td><td>ddd</td>
          </tr>
       </tbody>
    </table>
</figure>

出力したいマークアップ

<figure class=”wp-block-table”>の中に1階層divを追加したいとします。

<figure class="wp-block-table">
     //このdiv階層を追加したい。
    <div class="add-markup">
       <table>
          <tbody>
             <tr>
                <td>aaa</td><td>bbb</td></tr><tr><td>ccc</td><td>ddd</td>
            </tr>
          </tbody>
        </table>
     </div>
</figure>

コード

functions.php

function modify_content_markup( $content ) {
    // 正規表現を使って、置換するための変数を定義
    $pattern = '/<figure class="wp-block-table"><table>(.*?)<\/table><\/figure>/';
    $replacement = '<figure class="wp-block-table"><div class="add-markup"><table>$1</table></div></figure>';

    // 置換を実行する
    $modified = preg_replace( $pattern, $replacement, $content );

    // 変更後の記事本文を返す
    return $modified;
}

// the_contentフィルターにフック
add_filter( 'the_content', 'modify_content_markup' );

独自ブロック作成が必要なケース

今回の記事で紹介したコードは、あくまで既存ブロックのマークアップの一部置換であって、「ごりごりブロックの構造を変えたい」とか「新しいブロックを自分で作りたい」というケースには合いません。

そのような場合には、ブロックエディタを独自開発したり、既存のプラグインを使う方法があります。

それぞれの方法について、公式ドキュメントや解説記事(外部サイト)をいくつか紹介します。

独自でブロックを作る

・公式ドキュメント:Block Editor Handbook

・らくらくエンジニア:【基礎知識まとめ】WordPressでブロックを自作する方法

プラグインを利用する

Genesis Custom Blocks

Custom Blocks Constructor – Lazy Blocks

タイトルとURLをコピーしました