10年以上前にACF(Advanced Custom Fields)のリピーターフィールドプラグインを購入し、活用しておりました。しかし、一部の機能がWordPressのアップデートに対応しなくなったため、WordPress自体のアップデートが困難な状況に陥っておりました。

この問題を解決するため、別のプラグインへの移行を検討し、以下の選択肢を比較しました。

(1) Smart Custom Fields

数年前に利用した際、カスタマイズのしやすさが良かったので、今回の移行でも是非利用したいと考えていました。しかし、すでに開発が終了しており、今後の利用が難しいことが分かったため、選択肢から外すことにしました。

(2) Custom Field Suite

リピーターフィールドが無料で利用できる点から、いくつかのサイトで活用していました。しかし、現在は配信が停止されており、利用が不可能な状態となっているため、こちらも見送ることにしました。

(3) ACF PRO(有料版)

リピーターフィールドが利用可能な有料版(月額49ドル~)も選択肢に入れて検討しました。しかし、ACFの開発元であるWP EngineとWordPressの創始者であるマット・マレンウェッグ氏との間で意見の対立があり、一時的にWordPressの管理画面からACFが削除される事態が発生しました。こうした背景から、今後の不安要素を考慮し、ACFの利用も見送ることにしました。

(4) LazyBlocks

LazyBlocksは、カスタムフィールド専用のプラグインではなく、カスタムブロックを作成できるプラグインです。しかし、リピーターフィールドの利用が可能である点に加え、テンプレート設定やカスタムフィールドデータの保存にも対応しており、カスタムフィールドの作成にも十分応用できると判断しました。そのため、今回の移行候補とすることにしました。

実際にデータ移行のテストを行ったところ、通常のデータは問題なく移行できました。しかし、リピーターフィールドに関しては、データの構造が異なるため互換性がなく、手動でのデータ移行が必要であることが判明しました。

他の選択肢がない現状を踏まえ、少々手間がかかるものの、今後の安定した運用を考えるとLazyBlocksを採用するのが最善と判断しました。そのため、今回の移行においてLazyBlocksを使用することにしました。

今回はACFからLazyBlocksへ移行する際のポイントや経験を共有させていただきます。

ACFからLazyBlocksへの移行する際の注意点

まず最初に、ACF(Advanced Custom Fields)からLazyBlocksへの移行に際しての注意点をお伝えいたします。

1. リピーターフィールドのデータ構造の違い

  • ACFでは、リピーターフィールドの各項目が別々のカスタムフィールドに保存されます。
  • LazyBlocksでは、リピーターフィールドの全データが1つのカスタムフィールドにまとめて保存されます。

2. 同じブロックを複数設置する際の問題

  • LazyBlocksを利用してデータをmeta(カスタムフィールド)に保存した場合、同一ページ内で同じブロックを複数設置すると、全てのブロックが同じ値を参照するため、正しく表示されない場合があります。
  • この問題を解決するには、それぞれのブロックに異なる変数を設定し、適切に管理する必要があります。

3. カスタムフィールドの値を変更する際のツール

  • カスタムフィールドの値を編集・変更する場合は、Edit Custom Fieldsの利用を推奨します。

4. 既存のページにおけるブロック設置

  • 移行後、既存ページには自動的にブロックが設置されないため、手動でブロックを追加する必要があります。

5. リピーターフィールドの制限

  • LazyBlocksでは、リピーターフィールド内で入れ子構造(ネスト)が利用できません。

6.管理画面でのカスタムフィールド表示の注意点

  • WordPress管理画面でカスタムフィールドを表示している場合、LazyBlocksで入力した値が正しく反映されないことがあります。

ACFからLazyBlocksへの移行手順

1.LazyBlocksでブロックの作成

LazyBlocksでブロックを作成します。
カスタムフィールドに保存するには「SAVE IN META」にチェックを入れます。

acf-lazyblocks-01

2.カスタムフィールドのフィールド名の確認

LazyBlocks上で保存したNameがカスタムフィールドでどのように保存されているのか確認してみましょう。

(1)投稿ページの右ニューの設定を開き、カスタムフィールドの設定をONにします。

acf-lazyblocks-02

投稿ページを開くとカスタムフィールドがページ下部に表示されます。
LazyBlocksのNameとカスタムフィールドの名前が同じかどうか確認してみましょう。

acf-lazyblocks-03

(2)プラグインのEdit Custom Fieldsをインストールします。 Edit Custom Fieldsを開くと、下記のようにすべてのカスタムフィールドのフィールド名が表示されます。

acf-lazyblocks-04

この中にACFで使ったフィールド名があるので検索してみてください。

例えば、ACFのリピーターフィールドに設定されているフィールド名「basic-price」ですが、カスタムフィールドでは「rental_0_basic-price」といった形式で保存されていました。

一方、LazyBlocksでは同じフィールド名「basic-price」を利用しているので、カスタムフィールド名を「rental_0_basic-price」から「basic-price」へ変更する必要があります。この作業を他の全てのカスタムフィールドについても同様に行い、ACFとLazyBlocksのフィールド名を同じにします。

3. 既存ページに作成したブロックを設置

新規ページには作成したブロックが設置された状態ですが、既存のページに関してはブロックが設置されていないので、該当のブロックを設置する必要があります。

4. リピート部分のデータはデータを登録し直す

リピーターフィールドは、データの構造が異なるため互換性がなく、手動でのデータ移行が必要です。

5. テンプレートや表示部の記述をmetaを参考に記載し直す

カスタムフィールドを呼び出す際の記述も変わってきます。 get_lzb_metaを使って下記のように記述することになります。 詳しくはDisplay Custom Fields (Meta)をご覧ください。

<?php echo get_lzb_meta('フィールド名'); ?>

最後に

今回は結果として、ACF(Advanced Custom Fields)からLazyBlocksへの移行は無事に完了いたしました。
しかし、ページ数が多いため、リピーターフィールドの値の入力に時間と手間がかかってしまいました。
それでも、今後はWordPressのアップデートが可能になるため、大きな負担が軽減され、気持ちがずいぶん楽になったように感じております。