ACF無料版ではリピートフィールドが使えず困っていませんか?
・無料で実装できないのか?
・代替方法はないのか?
・できればコードも知りたい
本記事では、ACF無料版でもリピートフィールドのような構造を実現する方法を、カスタム投稿タイプを使って解説します。
ACF無料版でリピートフィールドを代用する仕組み
有料版の「リピートフィールド」は、1つのページの中に複数のデータ行を作成します。 一方、今回紹介する代用案は、「Q&A」という専用の投稿タイプを1つの大きな「箱」と見なす方法です。

- 箱を作る: カスタム投稿タイプで「Q&A」という型を作成します。
- 中身を入れる: 1つの質問ごとに1つの「投稿」を作成し、そこにACFのフィールド(質問・回答)を入力します。
- 並べて表示する: プログラム(PHP)の力で、バラバラの投稿を1箇所に呼び出して結合します。
この仕組みを使うことで、ACF Pro(年間49ドル〜)を契約することなく、実質的に無限のリスト項目を作成・管理できるようになります。
この実装方法のメリットと運用の注意点(デメリット)
メリット
- 完全無料: 年間$49(約7,500円〜)のライセンス料を節約できる
- データの再利用: 投稿として独立しているため、サイドバーや別ページでも呼び出しが容易
デメリット
- 管理画面の煩雑化: 1つの項目ごとに1投稿作成するため、件数が多いと管理が大変
- 並び替えの弱さ: ACF Proのように直感的なドラッグ&ドロップができない
向いているケース・向かないケース
- 向いている人: Q&A、スタッフ紹介、実績一覧など、項目が定型化されている場合
- 向いていない人: ページごとに全く異なる入力項目を、自由な順番で並び替えたい場合(この場合は有料版推奨)
| 比較項目 | 有料版 (リピートフィールド) | 今回の代替案 (カスタム投稿) |
|---|---|---|
| コスト | 年間 $49〜 | 0円(完全無料) |
| 編集のしやすさ | 1画面で完結(◎) | 1つずつ投稿が必要(△) |
| 並び替え | ドラッグ&ドロップ(◎) | 日付や追加プラグイン(△) |
| データの再利用 | 基本そのページのみ(△) | 他ページでも呼び出せる(◎) |
このように、無料で実装できる代わりに「管理のしやすさ」は劣ります。
どちらを優先するかで選択が変わります。
実装手順
今回のゴール:固定ページに「Q&A」を作成
簡易的なQ&Aを作成します。新規投稿すると、Q&A欄に追加されていくようなイメージです。

ステップ1:カスタム投稿タイプ作成
プラグインを追加から「Advanced Custom Fields」をダウンロードし、有効化します。

サイドバーに「ACF」が追加されました。
クリックしましょう。

投稿タイプを選択し、[+新規追加]から新しい投稿タイプを作成します。

複数ラベル:Q&A
単数ラベル:Q&A
投稿タイプキー:question-and-answer
複数ラベルと単数ラベルの違いは、
単数ラベル:1件を指す表示用
複数ラベル:一覧・集合を指す表示用
です。
例えば英語では
複数ラベル:Products
単数ラベル:Product
のように明確に使い分けるため、その名残として分かれています。が、日本語では同じ文言でOKです。
今回使用する「投稿タイプキー」はPHPで記述する際に使用していきます。PHPとフィールドグループで異なったフィールド名を使うとエラーが出ますので、ハイフンやアンダーバーなど間違えないように気を付けましょう。

入力できたら右上[変更内容を保存]を押します。

投稿タイプ一覧に「Q&A」が追加されました。

サイドバーに「Q&A」が表示されました。
これで投稿タイプの設定は完了です。

ステップ2:ACFで入力項目(フィールド)を設定する
サイドバー「ACF」からフィールドグループを[+新規追加]していきます。

フィールドグループタイトルは「Q&A」とします。

フィールドタイプ:テキスト
フィールドラベル:質問
フィールド名:question
入力できたら[閉じて新しいフィールドを追加]をクリックします。
今回使用する「フィールド名」はPHPで記述する際に使用していきます。PHPとフィールドグループで異なったフィールド名を使うとエラーが出ますので、ハイフンやアンダーバーなど間違えないように気を付けましょう。

フィールドタイプ:テキストエリア
フィールドラベル:回答
フィールド名:answer
入力できたら[フィードを閉じる]をクリックします。

フィールド下にある設定です。
ルールを
投稿タイプ 等しい Q&A にします。
先ほど作成した投稿タイプです。

選択できたら、右上の[変更内容を保存]を押して登録します。

作成したフィールドグループが追加されていればOKです。

これで下準備は完了しました!いよいよ情報を入力していきます。
先ほど作成した投稿タイプを選択して、[新規Q&Aを追加]をクリックします。
今回は3件のQ&Aを追加してみます。

画面下部に、フィールドグループ「Q&A」が生成されていると思います。
質問と回答を入力していきましょう。
入力できたら右上の[公開]をクリックして公開してください。
1件目

2件目

3件目

3件作成した状態です。

ステップ3:PHPコードで固定ページに表示させる実装手順
現時点では、まだ、データを入力したのみで表示できていません。
編集画面で入力したデータを固定ページに表示させるようにします。
表示したい固定ページが決まっている場合は、そのページのPHPが書ければ問題ないです。
今回は固定ページを新規作成し、PHPの紐づけを行いました。
PHPと固定ページを紐づける方法はいくつかありますが、スラッグを使っています。
固定ページの右上、「スラッグ」を、今回は「acf_repeat」にします。
変更できたらページを公開しましょう。

使用しているテーマ(推奨:子テーマ)配下に「page-acf_repeat.php」を作成します。
(例えばスラッグを「abc」にしたら、php名は「page-abc.php」、
スラッグを「fashion」にしたら、php名は「page-fashion.php」となります。)

PHPのコード
<?php
get_header();
// WP_Queryの引数を設定
$args = [
'post_type' => 'question-and-answer',
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'ASC',
];
// クエリを実行
$query = new WP_Query($args);
// 投稿が存在する場合のみ処理
if ($query->have_posts()):
?>
<div class="qa-list">
// ループ開始
<?php while ($query->have_posts()): $query->the_post();
// 管理画面で作成したカスタムフィールド「question」の値を取得
$question = get_field('question');
// 管理画面で作成したカスタムフィールド「answer」の値を取得
$answer = get_field('answer');
?>
<details class="qa-item">
<summary class="qa-question">
// 質問文を出力
// esc_html()でHTMLエスケープ
<?php echo esc_html($question); ?>
</summary>
<div class="qa-answer">
// 回答文を出力
<?php echo wpautop(esc_html($answer)); ?>
</div>
</details>
<?php endwhile; ?>
</div>
<?php
// ループ後にグローバル$postを元に戻す(重要)
wp_reset_postdata();
endif;
get_footer();
固定ページを読み込むと、データが表サイトに表示されました。
このままだと見にくいので、少しだけCSSも書いていきましょう。

.qa-list{
width: 50%;
margin: 5rem auto;
}
.qa-item {
border-bottom: 1px solid #ddd;
padding: 10px 0;
}
.qa-question {
cursor: pointer;
font-weight: bold;
position: relative;
padding-right: 30px;
list-style: none;
}
/* デフォルトの三角アイコンを消す */
.qa-question::-webkit-details-marker {
display: none;
}
.qa-question::after {
content: '+';
position: absolute;
right: 0;
top: 0;
}
details[open] .qa-question::after {
content: '-';
}
.qa-answer {
margin-top: 10px;
}
[▶]が消えて、[+]ボタンができました。

クリックするときちんと回答が表示されます。
簡易的なQ&Aのため、より整える場合はjavascriptなどで制御するのが望ましいです。

ついでに、投稿を増やしても問題なく表示されるか確認しましょう。
先ほどと同じ手順で「服装は自由ですか」を追加・公開しました。

再読み込みするときちんと表示されました。

表示自体はこれで完成です。
実装のポイント(エラー回避・注意点)
フィールド名の一致について(最重要)
ACFの設定画面で決めた『フィールド名』と、PHPコード内の get_field('○○') が1文字でも違うと表示されません。特にアンダーバーとハイフンの打ち間違いはよくあるミスです。
wp_reset_postdata() の重要性
ループの最後にある wp_reset_postdata(); を忘れると、その後のページの表示が崩れたり、サイドバーが正しく表示されなかったりします。
データの並び順について
カスタム投稿タイプで代用する場合、標準では『投稿日順』に並びます。任意の順番にしたい場合は、プラグイン(Post Types Orderなど)を併用するか、ACFに『並び順用』の数値フィールドを追加する必要があります。
posts_per_page = -1 の注意点
全件取得するため、投稿数が増えるとページ表示が重くなる可能性があります。
件数が多い場合はページネーションや件数制限を検討してください。
まとめ:ACF Proにアップグレードすべきタイミングとは?
ACF無料版でも、カスタム投稿タイプを活用することで、
リピートフィールドのような「繰り返し構造」は十分再現可能です。
ただし、この方法は万能ではありません。
■ この方法がおすすめな人
・Q&Aや用語集など、同じ構造のデータを増やしたい
・複数ページでデータを使い回したい
・コストをかけずに実装したい
■ ACF Proを検討すべき人
・1ページ内で自由に並び替えたい
・レイアウトごとに柔軟に構造を変えたい
・管理画面の操作性を重視したい
「データ管理のしやすさ」を取るか、
「編集画面の直感性」を取るかが判断基準になります。
まずは無料で構築してみて、運用が煩雑に感じたタイミングで
ACF Proへ移行するのがおすすめです。