WordPress

【WordPress】 ACF(Advanced Custom Fields)の使い方|作成から表示、PHPコードの書き方まで解説

実際にACFを触った際、
「ACFって本当に必要?」
「設定方法や表示方法がよくわからない…」
「値を入れているのに表示されない」

と感じることがありました。

この記事では、初心者の方向けに
・ACFでできること
・カスタムフィールドの作成方法
・PHPでの表示方法
・表示されないときの原因

を、実際につまずいたポイントも含めて解説します。

1.ACFとは

WordPressのACF(Advanced Custom Fields)とは、投稿や固定ページに独自の入力項目(カスタムフィールド)を自由に追加・管理できるプラグインです。固定ページや投稿ページの編集画面を自分好みにカスタマイズすることができます。

主なメリットは以下の通りです。

  • 入力ミスを防げる
  • デザインを崩さない
  • 更新作業を簡単にできる

2.ACFでできることは?

ACFを使うと、以下のようなことができます。

  • 商品ページを作る
  • FAQを構造化する
  • 管理画面をカスタマイズする

端的に言うと「管理画面で入力した内容を、構造化して安定的に表示したい時」です。具体例を出した方が理解しやすいと思うので、いくつか具体例を紹介します。

固定ページや投稿に「決まった項目」を持たせたい時

例:
店舗ページ
住所
電話番号
営業時間

→ 本文に直接書くのではなく、専用の入力欄として分けたい

デザイン上、本文と役割が異なる情報を扱いたい時

例:
ヒーローエリアのキャッチコピー
ファーストビュー用の画像
CTAボタンの文言・リンク先

→ エディタ本文とは別に、レイアウト用のデータとして管理したい

同じ構造のコンテンツを量産する時

例:
実績一覧
実績名

サムネイル
概要

FAQ
質問
回答

→ 毎回HTML構造を考えず、項目ごとに入力したい

繰り返し・入れ子構造のデータが必要な時

例:
料金表(プラン名+複数の項目)
スタッフ一覧(名前・写真・役職を複数人分)

→ Repeater / Group フィールドで構造化データとして扱う

非エンジニアが更新する前提のサイト

例:
運用者:HTMLを知らなくても更新したい
開発者:デザインの自由度を保ちつつ、データの管理が容易になる

→ 入力ミスを防ぎたい

※逆に、ACFが不要なケース

  • 単なる文章ページだけ
  • デザインや構造が今後変わらない
  • 管理者がHTML/CSSに慣れている

3.カスタムフィールドの設定方法

今回は試しに、服のカスタムフィールドを作成します。
以下が完成のイメージです。
商品「とっても暖かいカーディガン」を固定ページに表示させます。

3-1.Wordpress管理画面での設定

WordPress管理画面からACFをダウンロードし、有効化。左側のメニューバーにACFが追加されます。

フィールドグループ画面になっていることを確認し、[+新規追加]ボタンを押します。

フィールドグループタイトルを入力します。(必須項目です)

今回は「商品情報」としました。他と区別できるタイトルを記入すればOKです。

いよいよフィールドを作成していきます。

注意点

今回使用する「フィールド名」はPHPで記述する際に使用していきます。PHPとフィールドグループで異なったフィールド名を使うとエラーが出ますので、ハイフンやアンダーバーなど間違えないように気を付けましょう。

まずは画像のフィールドを作成します。

フィールドタイプ:画像
(使用用途:画像を表示)

フィールドラベル:画像を追加
(使用用途:固定ページや投稿ページの編集画面で表示される文言)

フィールド名:item-image
(使用用途:phpでデータを読み込む際に使用するデータの名前)

戻り値の形式:画像URL
(それぞれ画像に対してカスタムできる自由さが異なります。今回は一番分かりやすい画像URLを選択しています)

入力できたら[閉じてフィールドを追加]ボタンを押します。
(右下の[+フィールドを追加]ボタンでも大丈夫です)

次にタイトル(商品名)のフィールドを作成します。

フィールドタイプ:テキスト
(使用用途:文字数の少ないテキスト入力)

フィールドラベル:タイトルを追加
(使用用途:固定ページや投稿ページの編集画面で表示される文言)

フィールド名:item-name
(使用用途:phpでデータを読み込む際に使用するデータの名前)

初期値:未記入
(あってもなくてもOK)

入力できたら[閉じてフィールドを追加]ボタンを押します。
(右下の[+フィールドを追加]ボタンでも大丈夫です)

次に商品情報のフィールドを作成します。

フィールドタイプ:テキストエリア
(使用用途:複数行になりそうなテキスト入力)

フィールドラベル:商品情報を追加
(使用用途:固定ページや投稿ページの編集画面で表示される文言)

フィールド名:item-description
(使用用途:phpでデータを読み込む際に使用するデータの名前)

初期値:未記入
(あってもなくてもOK)

入力できたら[閉じてフィールドを追加]ボタンを押します。
(右下の[+フィールドを追加]ボタンでも大丈夫です)

次にカラーのフィールドを作成します。

フィールドタイプ:選択
(使用用途:どれか1つを選んでページに表示させたい場合)

フィールドラベル:色を選択
(使用用途:固定ページや投稿ページの編集画面で表示される文言)

フィールド名:item-color
(使用用途:phpでデータを読み込む際に使用するデータの名前)

選択肢:
white : ホワイト
brown : ブラウン
gray : グレー
(左側がPHPでのデータ出力に使うフィールド名:右側が編集画面で表示されるフィールドラベル)
(今回は区切りますがPHPに選択肢を記述しないため、区切りはあってもなくてもOKです)

初期値:未記入
(あってもなくてもOK)

入力できたら[閉じてフィールドを追加]ボタンを押します。
(右下の[+フィールドを追加]ボタンでも大丈夫です)

※もしもフィールドタイプが見つからない場合は、[フィールドを見る]ボタンを押して検索をかけてみましょう。

次にサイズ展開のフィールドを作成します。

フィールドタイプ:チェックボックス
(使用用途:ページに表示させたい選択肢が複数ある場合)

フィールドラベル:サイズ
(使用用途:固定ページや投稿ページの編集画面で表示される文言)

フィールド名:item-size
(使用用途:phpでデータを読み込む際に使用するデータの名前)

選択肢:
S
M
L
XL
(左側がPHPでのデータ出力に使うフィールド名:右側が編集画面で表示されるフィールドラベル)
(今回は区切りません。PHPには選択肢を記述しないため、区切りはあってもなくてもOKです)

初期値:未記入
(あってもなくてもOK)

入力できたら[閉じてフィールドを追加]ボタンを押します。
(右下の[+フィールドを追加]ボタンでも大丈夫です)

最後に、金額のフィールドを作成します。

フィールドタイプ:番号
(使用用途:数値を入力したい場合。自動でカンマが付与されます)

フィールドラベル:値段を入力
(使用用途:固定ページや投稿ページの編集画面で表示される文言)

フィールド名:item-price
(使用用途:phpでデータを読み込む際に使用するデータの名前)

初期値:未記入
(あってもなくてもOK)

現時点で6つのフィールドができているはずです。
[カートに入れる]ボタンはどの服のページでも共有デザインのため、ACFでは作成しません。

フィールドの下に設定画面があります。

今回は新しく「ACF練習用」という固定ページを事前に新規作成しました。
その固定ページのみに表示したいため、「固定ページ 等しい ACF練習用」 と指定します。
(すべての固定ページに反映したい場合は、「固定ページテンプレート 等しい デフォルトテンプレート」 となります)

ここまでできたら、[変更内容を保存]ボタンを押して保存してください。

3-2.固定ページで反映を確認し、ACFに値を入力

ACF練習用の固定ページに移動します。
画像のようにテキストブロックが生成されていればOKです。
データを入力していきましょう。

使いまわす部分はPHPで記述するため、この商品についてのデータのみ記入します。

3-3.ACFの値をPHPで表示する方法

現時点では、固定ページを公開しても真っ白なページになってしまいます。
編集画面で入力したデータをPHPで表示させるようにします。

PHPと固定ページを紐づける方法はいくつかありますが、今回は特定のページにのみ独自のレイアウトを適用させるため、固定ページのスラッグを利用したテンプレート作成(page-{slug}.php)を採用します。

固定ページの右上、「スラッグ」を、今回は「acf-test」にします。
変更できたらページを公開しましょう。

使用しているテーマ(推奨:子テーマ)配下に「page-acf-test.php」を作成します。


(例えばスラッグを「abc」にしたら、php名は「page-abc.php」、
スラッグを「fashion」にしたら、php名は「page-fashion.php」となります。)

PHPのコード

<?php get_header(); ?>
<main id="content" class="site-content">
<?php if ( have_posts() ) : ?>
  <div class="item-list">
    <?php while ( have_posts() ) : the_post(); ?>
      <article class="item-card">

        <?php
        $img = get_field('item-image');
        if ($img) {
          echo '<img src="' . esc_url($img) . '" alt="">';
        }
        ?>

        <h3>商品名:<?php the_field('item-name'); ?></h3>

        <p>商品情報:<?php the_field('item-description'); ?></p>
        <p>カラー:<?php the_field('item-color'); ?></p>
        <p>サイズ:<?php the_field('item-size'); ?></p>

        <p style="text-align: right" class="price">
          税込 <?php echo number_format(get_field('item-price')); ?>円
        </p>

      </article>
    <?php endwhile; ?>
    <a href="" class="button">カートに入れる</a>
  </div>
<?php endif; ?>
</main>
<?php get_footer(); ?>

the_field() は「値を取得してそのまま表示する関数」
get_field() は「値を取得するだけ(表示はしない)関数」という違いがあります。

※ACFで使用する関数について、詳しくはこちらの記事でまとめています。

【WordPress】カスタムフィールドで使う関数一覧 使用例も紹介 Advanced Custom Fields

固定ページを読み込むと、データが表サイトに表示されました。
このままだと見にくいので、少しだけCSSも書いていきましょう。

.site-content{
	width: 100%;
}
.item-list{
	margin:5rem auto;
	display: flex;
  flex-direction: column;
  align-items: center;
}
.button {
  display       : inline-block;
  text-align    : center; 
  cursor        : pointer; 
  padding       : 20px 100px; 
	text-decoration :none;
  background    : #D9D9D9;
  color         : #000000;
  line-height   : 1em;
  transition    : .3s; 
	
}
.item-card{
  width: 40%;
}
.item-card img{
  width: 60%;
	margin:0 auto;
	display: block;
  margin: 0 auto;
}
.price{
	margin: 50px 0;
}
.site-header,
footer {
  display: none;
}

これで完成です!

4.ACFが表示されない原因

フィールド名のミス

ACFで設定したフィールド名は、PHPでデータを取得する際にそのまま使用します。

例えば:

  • ACF側:item-image
  • PHP側:item_image

このように、ハイフン(-)とアンダーバー(_)が異なるだけでも、データは取得できません。

私自身もここでつまずきました。
見た目が似ているため気づきにくく、原因特定に時間がかかりました。
フィールド名は完全一致が必須なので、コピーして使うのがおすすめです。

get_fieldとthe_fieldの違い

ACFで値が表示されない原因として、get_fieldthe_fieldの使い分けミスもよくあります。

この2つは似ていますが、役割が異なります。

  • the_field():値をそのまま出力する
  • get_field():値を取得する(出力はしない)

この違いを理解していないと、「値は入っているのに表示されない」という状態になります。

条件分岐ミス

条件分岐の書き方によっても、ACFの値が表示されないことがあります。

  • 値が空の場合
  • 取得結果が想定と違う形式の場合(配列など)

特に画像フィールドは「戻り値の形式」によって挙動が変わります。

例えば:

  • URL
  • 配列
  • ID

ACFの画像設定で「画像URL」を選択しているのに、PHP側でIDや配列として処理しようとすると、何も表示されないかエラーになります。設定とコードの「戻り値の形式」が一致しているか必ず確認しましょう。

5.同じフィールドを何回も使いまわす

同じフィールドを何回も使いまわしたい!という時は、

・ACF Pro(Repeaterフィールド)
・カスタム投稿タイプ

のどちらかを使用します。

投稿タイプを使用したACFの作り方についてはこちら

【WordPress】ACF無料版でリピートフィールド風の実装をする方法(代替手段)

6.まとめ

作成できたでしょうか?
ACFは、固定ページや投稿ページの編集画面を自分好みにカスタマイズできるプラグインです。
自由度が高く便利な一方で 、PHP を使用するため、最初はハードルが高く感じるかもしれません。

しかし、基本的な使い方さえ押さえてしまえば、「HTMLに直接書いていた内容を、管理画面から安全に更新できる」という大きなメリットがあります。

小さな実装から取り入れ、少しずつ活用範囲を広げていくことが、ACFを使いこなす近道と言えるでしょう。

ACF関連の記事はこちらから

TOP