ACFで繰り返しフィールドを作成する方法

Advanced Custom Fields(ACF)のPRO版で使用できる、繰り返しフィールドの使い方の備忘録です。

繰り返しフィールドは、同じ構成のカスタムフィールドを何度も繰り返し使用できるフィールドタイプです。

例えば、テキストと画像のフィールドを持つフィールドセットを自由に増減させて、必要な数だけ使用することができます。

以下のサンプルでは、リンク付きのロゴ画像を設定するカスタムフィールドを作成しています。

右下の「行を追加」ボタンから、画像と、URL、テキストのフィールドセットを追加できます。

ACFの詳しい使い方やカスタムフィールドの設定方法は、こちらの記事でまとめています。

繰り返しフィールドの作り方

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

はじめに、繰り返しフィールドを作成するフィールドグループを用意します。(既にフィールドグループを作成している場合は、この操作は不要です。)

WordPress管理画面の左メニューから「ACF」>「フィールドグループ」を開き、「新規追加」もしくは中央の「Add Field Group」をクリックします。

一番上の「新規フィールドグループを追加」横のフォームに、フィールドグループのタイトルを入力します。

各項目が設定できたら、右上の「Save Changes」をクリックして保存します。

繰り返しフィールドを作成する

フィールドグループの用意ができたら、続いて「繰り返しフィールド」を作成します。

フィールドタイプに「繰り返しフィールド」を選択して、フィールドラベルとフィールド名を設定します。

サブフィールドを設定する

サブフィールドの中に、繰り返し使用するフィールドタイプを追加します。

今回は例として、ロゴ画像、リンク先URL、名前を設定しました。

作成できたら右上の「変更を保存」をクリックして保存します。

デフォルトの設定では、投稿ページに作成した繰り返しフィールドが表示されます。

固定ページやカスタム投稿ページにも表示したい場合は、Location Rulesで設定を変更します。

繰り返しフィールドの操作方法

作成した繰り返しフィールドは、通常のフィールドタイプと同様に入力や編集が可能です。

行を追加する

入力欄の行の追加したい場合は、右下の「行を追加」ボタンをクリックします。

フィールドセットの行が追加されます。

行を複製する

追加した行を削除したい場合は、右側のグレーの部分に表示される丸い「−」ボタンをクリックします。

マウスポインタをのせると「行を削除」と吹き出しが表示されるので、クリックして行を削除します。

行を複製する

行を入力値ごと複製したい場合は、右側に表示される「+」(または四角が二つ重なったアイコン)のボタンをクリックします。

マウスポインタをのせると「Duplicate row」と吹き出しが表示されるので、クリックして行を複製します。

繰り返しフィールドの表示方法

入力した繰り返しフィールドは、ループを用いたコードをテンプレートファイルに記入して出力します。

以下は、出力コードのサンプルです。

<?php if( have_rows('field_logo') ): ?>
  <?php while ( have_rows('field_logo') ) : the_row(); ?>
    <a href="<?php the_sub_field('logo_url'); ?>">
      <?php $logoImage = get_sub_field('logo_img'); ?>
      <?php if ($logoImage) { ?>
        <img src="<?php the_sub_field('logo_img'); ?>" alt="<?php the_sub_field('logo_name'); ?>">
      <?php } else { ?>
        <img src="<?php echo esc_url(get_stylesheet_directory_uri() . '/images/no-image.png'); ?>">
      <?php } ?>
    </a>
  <?php endwhile; ?>
<?php endif; ?>

はじめに、have_rows()で作成した繰り返しフィールドを取得します。「field_logo」部分は、作成した繰り返しフィールドのフィールド名を設定します。

繰り返しフィールドを取得できたら、whileのループでサブフィールドを出力します。

ループ内のthe_sub_field()で、サブフィールドの各入力値を出力します。引数には、フィールド名を設定します。

ロゴ画像の部分は、get_sub_field('logo_img')で取得した値をもとに条件分岐を設定しています。

Share on Twitter
関連記事
Snow Monkey Formsの確認画面で一部のテキストを非表示にする方法
Snow Monkey Formsの確認画面で一部のテキストを非表示にする方法
WordPressでOGPとTwitterカードをプラグイン無しで設定する方法
WordPressでOGPとTwitterカードをプラグイン無しで設定する方法
Contact Form 7の入力欄に文字を自動で入れる方法
Contact Form 7の入力欄に文字を自動で入れる方法