Advanced Custom Feld のアドオン Repeater Field の出力方法を紹介

Last update 
/ Posted by Takumi Hirashima

Advanced Custom Feld のアドオン Repeater Field の出力方法を紹介

WordPress のプラグイン ACF のアドオン Repeater Field(繰り返しフィールド)の出力方法と、表示されない出力されないなどの間違いやすい点や、そういった場合の対処方法などを紹介します。

  1. Repeater Field とは?
  2. リピーターの出力方法と注意点
  3. foreach を使った基本的なループ(PHP foreach loop)
  4. 表示の順番を逆にする方法
  5. リピーターを入れ子にする場合
  6. リピーターの出力結果をランダムにする方法
  7. まとめ

1.Repeater Field とは?

Repeater Field とは?

Repeater Field は Advanced custom field の有料アドオンになります。このアドオンは、カスタムフィールドを自由に増やせるフィールドセットを作ることができます。

2.リピーターの出力方法と注意点

リピーターの基本的な出力方法と、表示されない出力されないなどの間違えやすい点を紹介します。

Repeater Field の基本のループ

まずは基本のループを紹介します。ループには while 文を使います。
次のコードは、リピーターのフィールド名 repeater_field_name、中に設定したフィールド名 sub_field_name にした場合の出力方法です。

<?php if(have_rows('repeater_field_name')): ?>
<?php while(have_rows('repeater_field_name')): the_row(); ?>
<?php the_sub_field('sub_field_name'); ?>
<?php endwhile; ?>
<?php endif; ?>

※関数 have_rows と the_row は ACF v4.3.0 で追加されました。

入力が無い場合の処理

入力がない場合の処理は endwhile の後に else を追加します。

...
<?php endwhile; ?>
<?php else: ?>
<!-- 入力が無い場合の処理 -->
<?php endif; ?>

リピーターと有料アドオンのオプション機能を使った場合の出力

有料アドオンの Options Page(オプション機能)は、リピーターと組み合わせて使用することで、よりその能力を発揮します。
例えば、トップページに投稿とは別に、独立して管理できるバナーを複数設置したいときに便利です。

<?php if(have_rows('repeater_field_name','options')): ?>
<?php while(have_rows('repeater_field_name','options')): the_row(); ?>
<?php the_sub_field('sub_field_name'); ?>
<?php endwhile; ?>
<?php endif; ?>

※有料アドオンの「オプション」を使用する場合は options を追加します。これが以外と忘れがちなので、気をつけましょう。

注意点

リピーターのループ内の出力は the_field ではなく the_sub_field になります。
リピーターの出力がうまくいかない時は、大抵の場合この記述ミスなので、出力が上手くいかないときは、まずここをチェックしましょう。
ループを入れ子にした場合も同じく the_sub_field を使用します、ここも要チェックです。

3.foreach を使った基本的なループ(PHP foreach loop)

foreach を使ったループの出力方法を紹介します。

<?php 
  $rows = get_field('repeater_field_name');
  if($rows){
    foreach($rows as $row) { 
      echo $row['sub_field'];
    }
  }
?>

4.表示の順番を逆にする方法

表示の順番を逆にする場合は、array_reverse を使うことで、順番を逆にすることができます。
取得したリピーターの値を array_reverse を通すことで逆にします。

<?php 
  $rows = get_field('repeater_field_name');
  if($rows){
    $rows = array_reverse($rows);
    foreach($rows as $row) { 
      echo $row['sub_field'];
    }
  }
?>

5.リピーターを入れ子にする場合

リピーターを入れ子にした場合の出力方法を紹介します。
次のコードは、親のリピーターフィールド名が親、子のフィールド名が子、親と子に設定したフィールド名が sub_field_name1 と sub_field_name2 にした場合の出力方法です。

<?php if(have_rows('親')): ?>
<?php while(have_rows('親')): the_row(); ?>
<?php the_sub_field('sub_field_name1'); ?>
<?php if(have_rows('子')): ?>
<?php while(have_rows('子')): the_row(); ?>
<?php the_sub_field('sub_field_name2'); ?>
<?php endwhile; ?>
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>

前述した通り、ループを入れ子にした場合も同じく the_sub_field を使用します。

6.リピーターの出力結果をランダムにする方法

リピーターの出力結果をランダムにする方法を紹介します。
次のコードは、リピーターのフィールド名が画像セット、中に設定したフィールド名が画像の場合に、リピーターからランダムに行を検索、その行で見つかった画像を表示する方法です。

<?php 
  $rows = get_field('画像セット' );
  $rand_row = $rows[ array_rand( $rows ) ];
  $rand_row_image = $rand_row['画像' ];
  $image = wp_get_attachment_image_src( $rand_row_image, 'full' );
?>
<img src="<?php echo $image[0]; ?>" />

7.まとめ

WordPress のプラグイン ACF のアドオン Repeater Field の出力方法を紹介しました。
少々出力に癖がありますが、注意点に書いた the_field や the_sub_field をしっかり使い分けられると、出力でつまずくことはないと思います。それでも出力がうまくいかない時は、フィールド名が間違えていたり、フィールドタイプに合わせた記述ができていない事があるので、この辺りをしっかり確認しましょう。
その他、ACF のアドオン「オプション」機能と併用して使う場合は、関連記事の「Advanced custom field の出力方法」を参照してください。

WordPress プラグイン Advanced custom field の出力方法

私が続けて読みたい関連記事

スポンサーリンク