ROOTED|ルーテッド

山口県山口市の「頼れる」ホームページ制作


block bindings APIを試してみた【WordPress】


block bindings APIを試してみた【WordPress】

こんにちは。武林です。

最近WordPressの勉強をしているのですが、便利なAPIを発見したので今回はそれを試してみたいと思います。その名も「block bindings API」。実は数年前に実装されていたAPIで、試してみるのは今回が初めてです。

block bindings APIとは

WordPressの公式ページによると、block bindings APIは次のように書かれています。

この説明を読むと「動的なデータをブロックの属性にバインド(紐付ける)するためのAPI」という理解でよさそうです。どうやらWordPressのブロックはあらかじめ属性を持っており、その属性に色々なデータを紐付けることができるようです。

block bindings APIの活用方法

実は少し前に「hook_wp」というYouTubeチャンネルでblock bindings APIを知りました。そのため、どのように使うかというのはすでに知っています。以下の動画では、ブロックとカスタムフィールドを紐づける方法が紹介されていました。

また、ネット上の記事を見ると他にも天気のAPIから気温や湿度などを引っ張ってきてブロックに紐づける方法もあるようです。カスタムフィールドとブロックを紐づけるためのAPIかと思っていましたが、実際は幅広いデータをブロックと紐づけるAPIみたいですね。

  • 状態
  • 結果
  • 時間
  • 計算
  • 環境
  • 他者(ユーザー・API・プラグイン)

AIに質問すると、他にも上のようなデータをブロックに紐づけられるようです。

実践:カスタムフィールドとブロックを”バインド”してみた

以前からカスタムフィールドの値をブロックに直接入れられたらいいのにな、と思っていました。block bindings APIを使えばそれが実現できるということなので、試してみました。

使用したプラグイン

カスタムフィールドは定番のACFで作ります。

カスタムフィールドを用意

今回は名前を入力するためのテキストフィールドを作りました。フィールド名は「name」です。

フィールドを登録
エディター画面に表示された

カスタムフィールドとブロックをバインドする

それでは、カスタムフィールドと段落ブロックをバインドします。

つまずいたポイント

カスタムフィールドとブロックを用意するだけではバインドできないようです。てっきり管理画面から簡単にバインドできるものと思っていましたが、バインドするには少しコードを書かないといけません。

テキストフィールドと段落ブロックをバインドするために以下のコードをfunctions.phpに書きます。

add_action('init', 'rooted_register_meta');

function rooted_register_meta() {
  register_meta(
    'post',
    'name',  // 登録するメタキー(カスタムフィールド名)
    array(
      'show_in_rest'      => true,
      'single'            => true,
      'type'              => 'string',
      'sanitize_callback' => 'wp_strip_all_tags',
    )
  );
}

resigter_meta関数を使うことで、カスタムフィールド(name)をGutenbergに認知させることができるそう。これによって、正式にカスタムフィールドと段落ブロックを紐づけられました。

エディター画面右側のメニューに「属性」が追加され「content」が選べるようになっています。

「content」をクリックすると「name」が選べるようになっています。クリックして選択します。

するとname(名前)のカスタムフィールドに入っている値が段落ブロックに入りました。

試しに別の値を入れて保存してからページを再読み込みすると、ブロックに同じ値が表示されました。きちんと同期されていることがわかります。

意外と簡単。使い方次第でめちゃくちゃ便利かも。

今回試してみるまではなんとなく難しそうだなと思っていました。しかし、実際にやってみると意外と簡単です。

カスタムフィールドの値が同じ画面上でブロックに反映されるというのは、これまで関数を使って出力していた私としてはすごくうれしいです。

今回は段落ブロックとカスタムフィールドの紐づけだったので「わざわざこのAPIを使わなくてもいいかも」と一瞬思いました。しかし、block bindins APIはカスタムフィールドだけでなく色々なデータをブロックに紐づけられるので、状況によってはめちゃくちゃ便利な気がします。

驚くような進化を続けているWordPress。今後のアップデートも楽しみです。

武林弘輔