2026.09.25 公開 2026.10.04 更新

ACFの使い方|カスタムフィールドの作成から表示まで

ACFの使い方|カスタムフィールドの作成から表示まで
    この記事でわかること

  • 編集画面に、サイトに合わせた専用の入力欄を追加できる
  • 入力した値を、テンプレートで安全に表示できる
  • 入力欄や値が表示されないときに、原因を見つけて直せる

ACFを使うと、WordPressの編集画面に専用の入力欄を追加できます。入力する内容と表示するデザインを分けて管理できるため、更新しやすいサイトになります。この記事では、入力欄の作成からテンプレートでの表示までを順番に解説します。

ネコ丸

ネコ丸

最初は「作る→表示する」の流れだけ覚えれば大丈夫だよ!

ACFの使い方の全体像

ACFは「入れ物を作る→項目を決める→値の形を選ぶ→表示する」の順で進めると理解しやすいです。入れ物がなければ項目は作れません。値の形がわからなければ、正しく表示することもできません。

前の段階が次の段階の前提になっているので、初めての方は目次の順に読み進めてください。やりたいことが決まっている場合は、次の表から使うものと、解説しているSTEPを探してください。

やりたいこと 使うもの 解説
フィールドを作る フィールドグループ STEP1
入力欄を出す画面を決める 位置ルール STEP1
画像を表示する 画像フィールド STEP3
値を表示する get_field() / the_field() STEP4
安全に出力する esc_html() など STEP4
入力欄を出し分ける 条件付きロジック 発展
ユーザーの値を取得する get_field()の第2引数 発展
投稿タイプを追加する 投稿タイプの登録 発展
ネコ丸

ネコ丸

今どのSTEPを読んでいるか意識すると、迷子にならないよ!

準備:ACFとは?導入方法

まずは、ACFでできることと導入方法を確認します。すでにインストール済みの方は、STEP1から読み進めてください。

ACFでできること

ACF(Advanced Custom Fields)は、編集画面に追加の入力欄(カスタムフィールド)を作れるプラグインです。WordPress標準のカスタムフィールドより、入力しやすい画面を用意できます。

例えばトップページ用に「ヒーロー画像」の入力欄を作り、トップページの編集画面だけに表示できます。入力欄を追加できる場所は、次のとおりです。

  • 投稿・固定ページ
  • カスタム投稿タイプ
  • ユーザー
  • タクソノミーのターム
  • メディア・コメント

無料版とPRO版の違い

基本的な機能は、無料版で十分に使えます。次の機能はPRO版のみなので、必要になったときに検討しましょう。

  • リピーター
  • 柔軟コンテンツ
  • オプションページ
  • ギャラリー
  • クローン
  • ACFブロック

インストール方法

動作要件は、WordPress 6.2以上・PHP 7.4以上です。2026年9月時点の最新版は6.8.10です。

  1. 管理画面の「プラグイン」>「新規追加」を開く
  2. 「Advanced Custom Fields」または「ACF」で検索する
  3. インストールして有効化する
  4. メニューに追加された「ACF」から、フィールドグループを作成する

ACFの管理画面の表記は、言語設定やバージョンによって変わることがあります。この記事では「日本語(英語)」の形で両方を記載します。

ネコ丸

ネコ丸

画面の表記が違っても、英語表記と見比べれば見つけやすいよ!

STEP1:フィールドグループを作る

フィールドグループは、入力欄をまとめ、どの編集画面に出すかを決める単位です。タイトル・フィールド・位置ルール・表示設定の4つで構成されます。

フィールドグループを新規作成する

フィールドグループは、次の手順で作成します。

  1. 管理画面の「ACF」>「フィールドグループ(Field Groups)」>「新規追加(Add New)」を開く
  2. タイトルを入力する(例:「ホームページ」「イベント」)
  3. 「フィールドを追加(Add Field)」で入力欄を追加する
  4. フィールドタイプを、プルダウンまたは「フィールドを参照(Browse Fields)」から選ぶ
  5. 「変更を保存(Save Changes)」で保存する

タイトルは、編集画面で入力欄を囲む枠の見出しとして表示されます。タイトルが空のままだと、保存ボタンが押せません。

追加したフィールドは、最初は「テキスト」タイプになっています。並び順は、番号部分をドラッグして入れ替えられます。

位置ルールで表示する画面を決める

フィールドグループ編集画面の下部には、タブ付きの設定パネルがあります。「位置(Location)」タブで、入力欄を出す画面を指定します。

ルールの例 入力欄が表示される画面
投稿タイプ = 導入事例 導入事例の編集画面
固定ページテンプレート = サイドバーテンプレート サイドバーテンプレートを使う固定ページの編集画面

ルールは、AND(かつ)とOR(または)で組み合わせられます。複数の条件を満たす画面だけに出すことも可能です。

表示やグループ全体の設定

位置以外のタブでは、編集画面での見え方やグループ全体の設定を変えられます。

タブ 設定できること
プレゼンテーション(Presentation) 編集画面での見え方、フィールドグループの「順番」(0が先頭)
グループ設定(Group Settings) 有効・無効の切り替え、REST APIへの表示(初期値はオフ)、一覧に出す説明、編集者向けの表示タイトル

1つの画面に複数のフィールドグループが出る場合、表示に関する設定は順番が先頭のグループのものが使われます。

ネコ丸

ネコ丸

入力欄が編集画面に出ないときは、まず位置ルールを確認してね!

STEP2:フィールドの基本設定を決める

入れ物ができたら、中に入れる入力欄を設定します。すべてのフィールドに共通する設定と、フィールド名の付け方を見ていきます。

すべてのフィールドに共通する設定

フィールドには、タイプに関係なく使える共通の設定があります。上の3つは必須項目です。

設定 内容
フィールドラベル(Field Label) 【必須】編集画面に表示される名前
フィールド名(Field Name) 【必須】テンプレートで値を取り出すときに使う名前
フィールドタイプ(Field Type) 【必須】入力欄の種類。選べる設定や取り出す値の形が変わる
説明(Instructions) 入力するときに表示される説明文
必須(Required) 空のまま保存するとエラーを表示する
条件付きロジック(Conditional Logic) 他のフィールドの値で表示・非表示を切り替える(発展で解説)
ラッパー属性(Wrapper Attributes) 入力欄を囲む要素にclass・id・幅を付ける

フィールドラベルは入力する人向けの名前なので、日本語やスペースも使えます。テンプレートでは使わないため、わかりやすさを優先して付けましょう。

筆者の環境では、「説明」欄は「プレゼンテーション」タブにありました。見当たらないときは、タブを切り替えて探してみてください。

フィールド名の付け方

フィールド名は、ラベルから自動で作られます。小文字の英数字で、スペースや特殊文字を使わずに付けましょう。アンダースコアとハイフンは使えます。

例えば「トップに表示」というラベルなら、case_show_topのような名前にします。

6.6.0以降、新しく作るフィールド名は小文字のみになりました。大文字を使いたい場合は、6.6.2で追加されたJSフィルターconvert_field_name_to_lowercaseで変更できます。

実務では、フィールド名の先頭を揃えるのがおすすめです。導入事例用ならcase_で始めるなど、用途ごとに揃えると名前の重複を防げます。

ネコ丸

ネコ丸

フィールド名はあとから変えると大変だから、最初にルールを決めておこうね!

STEP3:フィールドタイプと返り値を理解する

返り値(Return Format)とは、get_field()で取り出したときの値の形です。DBに保存される値とは別で、取り出すときに設定に合わせて変換されます。

画像フィールドを表示する

画像(Image)フィールドの返り値は、「画像配列」「画像URL」「画像ID」から選べます。どれを選んでも、DBには画像IDが保存されます。

画像IDで表示する

返り値を「画像ID」にした場合は、wp_get_attachment_image()でimgタグを出力します。

<?php
$image = get_field( 'hero_image' );                // ①
if ( $image ) {
  echo wp_get_attachment_image( $image, 'full' );  // ②
}
?>
コード解説
① 画像フィールドの値(画像ID)を取得する
② 画像IDとサイズを渡してimgタグを出力する。srcset(レスポンシブ画像)も自動で付く

画像配列で表示する

返り値を「画像配列」にした場合は、配列からURLやaltを取り出して使います。キャプションやサイズ別のURLも取得できます。

<?php $image = get_field( 'hero_image' ); ?>            <!-- ① -->
<?php if ( $image ) : ?>
  <img src="<?php echo esc_url( $image['url'] ); ?>"
       alt="<?php echo esc_attr( $image['alt'] ); ?>">  <!-- ② -->
<?php endif; ?>
コード解説
① 画像フィールドの値(画像配列)を取得する
② 配列からURLとaltを取り出し、それぞれエスケープして出力する

画像IDと画像配列の使い分け

返り値 向いている場面
画像ID レスポンシブ対応の画像を、シンプルなコードで出したいとき
画像配列 altやキャプションなどを個別に組み立てたいとき

関係フィールドの返り値

関係(Relationship)は、複数の投稿を選べるフィールドです。投稿タイプ・ステータス・タクソノミーで、選べる投稿を絞り込めます。

返り値は「投稿オブジェクト(WP_Post)」と「投稿ID(整数)」から選びます。どちらの場合も、選んだ投稿が配列で返ります。

DBに保存されるのは投稿IDのみです。投稿オブジェクトを選んだ場合も、取り出すときに変換されています。

真/偽・テキスト系のフィールド

単純な値を扱うフィールドは、返り値を意識せずに使えます。

フィールドタイプ 内容
真/偽(True / False) オン・オフを切り替える。get_field()では真偽値として扱える
テキスト/テキストエリア/数値 単一の値を保存する基本のフィールド

例えば「トップに表示」のような、表示する・しないの切り替えには真/偽が便利です。

ネコ丸

ネコ丸

画像が表示されないときは、返り値の設定とコードが合っているか確認してね!

STEP4:テンプレートで値を表示する

ACFの値は、WordPressの投稿メタ(post_meta)として保存されます。get_post_meta()でも取得できますが、タイプに合わせて値を整えるget_field()を使うのがおすすめです。

get_field()とthe_field()で値を表示する

値を取り出すにはget_field()、そのまま出力するにはthe_field()を使います。

<?php $text = get_field( 'sub_heading' ); ?>  <!-- 値を変数に入れる -->
<?php the_field( 'sub_heading' ); ?>          <!-- 値をそのまま出力する -->

get_field()には、次の4つの引数を指定できます。

引数 内容
$selector 【必須】フィールド名またはフィールドキー
$post_id 値の取得先。省略すると現在の投稿になる
$format_value 返り値の形に整えるかどうか(初期値はtrue)
$escape_html エスケープ済みの値を返すかどうか(6.2.6以降、初期値はfalse)

ループの外や、別の投稿の値を取り出すときは、$post_idに投稿IDを渡します。

2つの関数は、次のように使い分けます。the_field()は、6.2.7以降は自動でエスケープ※1されます。

関数 動き 向いている場面
get_field() 値を返す。エスケープはしない 条件分岐や加工など、変数に入れて使うとき
the_field() 値を出力する。自動でエスケープする 取り出した値をそのまま表示するとき

※1:エスケープ…出力する値に含まれる悪意あるHTMLなどを、無害な状態にする処理のことです。

値があるときだけ表示する

入力が空のときに、見出しタグだけが残るのを防ぐ書き方です。ifで値の有無を確認してから出力します。

<?php if ( get_field( 'sub_heading' ) ) : ?>                      <!-- 値があるか確認 -->
  <h2><?php echo esc_html( get_field( 'sub_heading' ) ); ?></h2>  <!-- エスケープして出力 -->
<?php endif; ?>

出力時は必ずエスケープする

get_field()で取り出した値は、エスケープされません。出力するときは、値の種類に合わせて次の関数を使いましょう。

関数 使う場面
esc_html() テキストとして出力するとき
esc_attr() altなど、HTMLの属性値に入れるとき
esc_url() URLを出力するとき
wp_kses_post() HTMLを含む値を出力するとき

エスケープが必要な理由は、寄稿者以上のユーザーが、ACF以外の方法で悪意あるHTMLを入れられる可能性があるためです。

6.2.6以降は、get_field()の第4引数をtrueにすると、エスケープ済みの値が返ります。自分でエスケープ関数を書く代わりに使えます。

古い記事では「the_field()はHTMLをそのまま出力する」と説明されていることがあります。現在はscriptなどが除去されるため、HTMLを含むフィールドは表示が変わる可能性があります。

ネコ丸

ネコ丸

get_field()を出力するときは「エスケープ関数で包む」をクセにしようね!

発展:もっと便利に使う

基本の流れに慣れたら、応用的な使い方も試してみましょう。入力欄の出し分け、投稿以外の値の取得、投稿タイプの登録を紹介します。

条件付きロジックで入力欄を出し分ける

条件付きロジックを使うと、他のフィールドの値に応じて入力欄を表示・非表示にできます。条件に使えるのは、セレクト・チェックボックス・真/偽・ラジオの4種類です。

例えば「トップに表示」(真/偽)がオンのときだけ、「表示順」と「トップ用コメント」を表示できます。条件グループを複数作れば、ANDとORを組み合わせることも可能です。

ユーザーやタームの値を取得する

投稿以外に保存した値は、get_field()の第2引数で取得先を指定して取り出します。the_field()も同じ指定方法です。

第2引数の値 取得先
省略・false 現在の投稿
123 投稿ID 123の投稿
"user_2" ユーザーID 2のユーザー
"term_123"・"category_123" タームID 123のターム
"event_4" カスタムタクソノミー「event」のタームID 4
"option"・"options" オプションページ(PRO版)

例えば投稿者のプロフィール画像を表示したい場合は、投稿者のユーザーIDを使って取得先を指定します。

$author_id = get_the_author_meta( 'ID' );           // 投稿者のユーザーIDを取得
get_field( 'author_badge', 'user_' . $author_id );  // そのユーザーの値を取得

ACFでカスタム投稿タイプを登録する

無料版でも、ACFの管理画面からカスタム投稿タイプとタクソノミーを登録できます。別のプラグインやコードを用意する必要はありません。

登録後は、位置ルールで「投稿タイプ = 登録した投稿タイプ」を指定します。すると、その投稿タイプ専用の入力欄になります。

ネコ丸

ネコ丸

投稿タイプとフィールドをACFだけで作れるのは便利だよ!

さいごに

まとめ

ACFは「フィールドグループを作る→フィールドを設定する→返り値を選ぶ→テンプレートで表示する」の順に進めると迷いません。まずは次の3つを押さえましょう。

  • 位置ルールで、入力欄を出す画面を決める
  • 画像フィールドは、返り値に合わせて表示方法を変える
  • get_field()の値は、出力時にエスケープする

慣れてきたら、条件付きロジックや投稿以外の値の取得も試してみてください。

よくある質問

get_post_meta()で値を取得してもいい?

取得はできますが、get_field()を使うのがおすすめです。get_field()はフィールドタイプに合わせて、値を返り値の形に整えてくれます。

the_field()で出力していたHTMLが表示されなくなりました

6.2.7以降、the_field()は自動でエスケープされるようになりました。scriptなどが除去されるため、HTMLを含むフィールドは表示が変わる場合があります。

フィールド名に大文字が使えません

6.6.0以降、新しく作るフィールド名は小文字のみになりました。大文字が必要な場合は、JSフィルターconvert_field_name_to_lowercaseで変更できます。

ユーザーやタームに保存した値が取得できません

get_field()の第2引数で、取得先を指定しているか確認しましょう。ユーザーなら"user_2"、タームなら"term_123"の形で指定します。

リピーターやオプションページが見当たりません

リピーターとオプションページは、PRO版のみの機能です。無料版では使えないため、必要な場合はPRO版を検討してください。