2026年5月20日
2026年5月20日
Advanced Custom Fields(ACF)の基本的な使い方
はじめに
Advanced Custom Fields(ACF)はWordPressに任意のカスタムフィールドを追加できるプラグインです。テキスト・画像・セレクトボックス・繰り返しフィールドなど豊富なフィールドタイプで、投稿・固定ページ・カスタム投稿タイプに独自の入力欄を追加できます。
症状・原因
- 投稿に独自の入力欄(料金・電話番号・画像など)を追加したい
- カスタム投稿タイプに対応したフィールドグループを設定したい
- ACFのフィールドをテーマファイルで表示したい
- フィールドグループをコードで登録・管理したい
解決手順
ステップ1:ACFをインストールする
wp plugin install advanced-custom-fields --activate
# ACF Pro の場合はライセンスキーを取得してからインストール
管理画面から:
プラグイン → 新規追加 → 「Advanced Custom Fields」で検索
→「今すぐインストール」→「有効化」
ステップ2:フィールドグループを作成する
ACF → フィールドグループ → 「新規追加」
→ グループ名: 「会社情報」
→「フィールドを追加」
- フィールドタイプ: テキスト
- フィールドラベル: 電話番号
- フィールド名: phone_number(自動生成)
→「フィールドを追加」
- フィールドタイプ: 画像
- フィールドラベル: メイン画像
- フィールド名: main_image
- 戻り値の形式: 画像配列
→ 表示条件(ロケーション):
- 投稿タイプ = 固定ページ
→ 「公開」をクリック
ステップ3:フィールドグループをコードで登録する
プラグイン管理に依存せず、テーマ/プラグインでフィールドを定義:
// functions.php — ACFフィールドグループをコードで登録
add_action('acf/init', function() {
acf_add_local_field_group([
'key' => 'group_company_info',
'title' => '会社情報',
'fields' => [
[
'key' => 'field_phone_number',
'label' => '電話番号',
'name' => 'phone_number',
'type' => 'text',
],
[
'key' => 'field_main_image',
'label' => 'メイン画像',
'name' => 'main_image',
'type' => 'image',
'return_format' => 'array',
'preview_size' => 'medium',
],
],
'location' => [
[['param' => 'post_type', 'operator' => '==', 'value' => 'page']],
],
]);
});
ステップ4:フィールドタイプを使い分ける
よく使うフィールドタイプ:
→ テキスト: 短い文字列(タイトル・電話番号)
→ テキストエリア: 複数行テキスト
→ 数値: 価格・個数
→ 画像: 写真1枚(IDまたは配列で返す)
→ ギャラリー: 複数枚画像
→ セレクト: ドロップダウン選択
→ チェックボックス: 複数選択
→ True/False: ON/OFFスイッチ
→ 関係: 他の投稿へのリンク
→ 繰り返し(Repeater): 複数行の入力(ACF Pro)
→ フレキシブルコンテンツ: 可変レイアウト(ACF Pro)
ステップ5:WP-CLIでACFフィールドを確認する
# 投稿のACFメタデータを確認
wp post meta list 123 --format=table
# 特定フィールドの値を取得
wp post meta get 123 phone_number
# フィールドグループ(CPT: acf-field-group)を一覧表示
wp post list --post_type=acf-field-group --fields=ID,post_title,post_status
# フィールドグループをJSONでエクスポート
wp post list --post_type=acf-field-group --format=ids | \
xargs -I {} wp post get {} --field=post_content > acf-export.json
ステップ6:フィールドをPHPで取得する
// 単一フィールドを取得(グローバルループ内)
$phone = get_field('phone_number');
echo esc_html($phone);
// 投稿IDを指定して取得(ループ外)
$image = get_field('main_image', 42);
if ($image) {
echo '<img src="' . esc_url($image['url']) . '" alt="' . esc_attr($image['alt']) . '">';
}
// サブフィールドを持つ繰り返しフィールド(ACF Pro)
if (have_rows('staff_list')) {
while (have_rows('staff_list')) {
the_row();
$name = get_sub_field('staff_name');
$title = get_sub_field('staff_title');
echo '<p>' . esc_html($name) . '(' . esc_html($title) . ')</p>';
}
}
注意事項
- ACFのフィールド名はスネークケース(
phone_number)で統一してください - フィールドグループをコード登録する場合、管理画面での編集は不要(UIに表示されない)
- ACF Proの「繰り返し」「フレキシブルコンテンツ」は有料版のみです
まとめ
ACFはフィールドグループを管理画面またはコードで登録し、get_field() で値を取得してテンプレートに表示します。acf_add_local_field_group() でコード管理すれば、Git管理との相性も向上します。