WordPressでカスタムフィールドを扱うプラグインとして、Smart Custom Fieldsと並んで長年支持されてきた「Custom Field Suite(CFS)」。しかしこのプラグインは、既にWordPress.orgでの配布が停止されており、今から新規に導入することはできません。
この記事では、CFSが使えなくなった経緯を正確に整理したうえで、移行先の候補を横並びで比較し、実際にCFSのループフィールド(繰り返し項目)をどう移行すればいいのかまで、具体的な手順で解説します。
WordPress.orgでの配布は停止済み。アップデートも今後提供されません。
- XSS・SQLインジェクション等の複数脆弱性が確認済み
- 無料版でリピーターフィールドが使える移行先あり
- ブロックエディタにネイティブ統合
CFSが配布停止に至った理由は、単なるサポート終了ではありません。クロスサイトスクリプティング(XSS)、コードインジェクション、SQLインジェクションという複数の脆弱性が同時に確認されたことが直接の引き金です。停止日は2024年8月20日で、該当する脆弱性はJVN iPediaにJVNDB-2024-004159・JVNDB-2024-004382・JVNDB-2024-004383として登録されています。
つまりこれは「機能が古くなった」というレベルの話ではなく、攻撃者に悪用され得る具体的な欠陥が指摘された結果の措置だということです。
すでにサイトにインストール済みの方は今も動作は続けられますが、WordPress.org経由でのアップデート提供は止まっている状態です。脆弱性が是正される見込みも立っていないため、セキュリティ上のリスクを抱えたまま運用を続けることになります。早めに移行先を決めておくことを強くおすすめします。
移行先候補を比較する
CFSからの移行先としてよく挙がる候補を整理しました。
| プラグイン | 料金 | ループフィールド相当の機能 | 特徴 |
|---|---|---|---|
| Pods | 無料 | ◯(Repeatable Group) | 高機能だが独自の管理画面・用語に慣れが必要 |
| ACF Lite | 無料 | × | リピーターはPro版限定 |
| ACF Pro | $49〜249/年 | ◯ | 業界標準、移行事例も多い。サブスク費用が発生 |
| Meta Box | 無料〜有料 | ◯(無料枠あり) | 高機能、フィールドタイプが豊富 |
| Lazy Blocks | 無料 | ◯(Repeaterが無料版標準搭載) | ブロックエディタに標準統合。CFSと違いメタボックスではなくブロックとして本文に配置 |
PHP直書き(add_meta_box) | 無料 | 自前実装次第 | 自由度は最大だが、保守性は低い |
CFSからの移行というと、同じ「メタボックス型」であるPodsやACF Proが選ばれがちです。ですが、CFSのループフィールドで作っていたものの多くは、実際には「投稿本文の中に繰り返し表示したい情報」であることが多く、その場合はメタボックスに固執する必要はありません。ブロックとして本文中に直接配置できるLazy Blocksの方が、むしろ自然な移行先になるケースがあります。
装飾ブロック系のプラグインでも同様に、開発終了・有料化をきっかけにLazy Blocksへ乗り換える動きがあります。具体例としてArkhe Blocksの無料版が使えなくなった人へ|安全な代替手段もあわせてご覧ください。
気になる方はLazy Blocks公式サイトで、無料版の範囲を先に確認しておくと、この後の移行手順がスムーズに理解できます。
CFSのループフィールドをLazy Blocksに移行する
CFSで「実績・導入事例紹介」のようなループフィールドを作っていた場合を例に、Lazy Blocksでの再現方法を解説します。
CFSでの構成(Before)
CFSでは、投稿編集画面の下に表示されるメタボックス内に、「Loop」フィールドタイプで実績名・実施年・概要をセットにして繰り返し入力する構成が一般的でした(実績紹介・導入事例一覧などでよく使われるパターンです)。
Lazy Blocksでの構成(After)
同じ内容をLazy BlocksのRepeater Controlで再現します。
1. Repeater — Label: 実績一覧 / Slug: works_list
a. Text — Label: 実績名 / Slug: work_title
b. Text — Label: 実施年 / Slug: work_year
c. Textarea — Label: 概要 / Slug: work_summary
<?php if ( ! empty( $attributes['works_list'] ) && is_array( $attributes['works_list'] ) ) : ?>
<ul class="works-list">
<?php foreach ( $attributes['works_list'] as $work ) : ?>
<li class="works-item">
<span class="works-year"><?php echo esc_html( $work['work_year'] ?? '' ); ?></span>
<div class="works-body">
<p class="works-title"><?php echo esc_html( $work['work_title'] ?? '' ); ?></p>
<p class="works-summary"><?php echo nl2br( esc_html( $work['work_summary'] ?? '' ) ); ?></p>
</div>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
CFSとの主な違い(つまずきやすいポイント)
| CFSでの感覚 | Lazy Blocksでの実態 |
|---|---|
| メタボックス内に固定表示される | ブロックとして本文中の好きな位置に配置する(複数配置も可能) |
PHPテンプレート側でget_field()のような関数を呼び出す | ブロック自体に出力コードを持たせるため、テーマ側で個別に取得コードを書く必要がない |
| ループの入れ子(Loop内Loop)が可能だった | Lazy Blocksはリピーターの入れ子(ネスト)を公式に非対応としている。同じ構成が必要な場合は、複数の独立したリピーターに設計し直す |
特に3点目は、CFSで複雑な入れ子構造を組んでいた人ほど注意が必要です。移行時は「本当にその入れ子が必要か」を見直すいい機会でもあります。
複雑なリレーションが不要なら、学習コストの低いLazy Blocksで十分なケースがほとんどです。
- Podsは独自概念の学習コストが高め
- Lazy Blocksは無料でループ相当の機能を再現できる
- ブロックとして本文に直接配置できる
Podsへの移行という選択肢も
実際にCFSからPodsへ移行し、Repeatable Group機能でループフィールドを再現した制作者の記録もネット上にあります。Podsは非常に高機能なプラグインで、複雑なリレーション(投稿同士の関連付け)を組みたい場合には有力な選択肢です。
ただしPodsは独自の概念(Pod、Group、Fieldの階層構造)を理解する必要があり、学習コストはLazy Blocksよりも高めです。「CFSでやっていたことをシンプルに再現したいだけ」という場合は、Lazy Blocksの方が学習コストを抑えられます。
💡 このページで使われているダウンロードカード・料金表などの装飾ブロックは、すべて Lazy Blocks(Pro)で自作したものです。 作り方はこちら
結論:あなたに合った移行先
| こんな人には | おすすめ |
|---|---|
| ブロックエディタ中心で運用、シンプルな繰り返し項目が中心 | Lazy Blocks |
| 投稿同士の複雑なリレーションを組みたい | Pods |
| 法人サイトで手厚いサポート・ドキュメントを重視 | ACF Pro |
| なるべく学習コストをかけたくない、無料で完結させたい | Lazy Blocks |
CFSの公開停止は、単なる乗り換えの手間ではなく、脆弱性を抱えたプラグインを使い続けるリスクの問題でもあります。この機会に、ブロックエディタ標準統合というより現代的な構成への移行も検討してみてください。
インポートするだけで、明日から移行先のブロックがすぐ使えます。
- コピペ不要、インポートするだけ
- リピーター対応ブロックがすぐ使える
- メールアドレス登録も不要

