【WordPress】ACFの繰り返しフィールドの個数の数え方

Web開発
この記事は約4分で読めます。

こんにちは、@Manabu です。

WordPressのプラグインの中に、Advanced Custom Fields(以下、ACF)というものがあります。

無料版と有料版があり、有料版になると無料版では使用できなかった機能が使えるようになります。

今回は、ACFの有料版で使用できる「繰り返しフィールド」の繰り返す数をカウントする方法について紹介します。

以下のような人におすすめの記事です。

・今何回目の繰り返しか知りたい
・繰り返しの合計回数が知りたい

基本的な使い方

ACFのフィルードグループを作成します。

以下のように、「loop-item」の繰り返しフィールドの中で、「item_1」と「item_2」というテキストを繰り返させるようなフィールドグループがあるとします。

phpの処理では、以下のように記載することで画面上に「item_1」と「item_2」が表示されます。

<?phpif( have_rows('loop-item') ): ?>
  <?phpwhile( have_rows('loop-item') ): the_row(); ?>
    <p><?phpthe_sub_field('item_1'); ?></p>
    <p><?phpthe_sub_field('item_2'); ?></p>
  <?phpendwhile; ?>
<?phpendif; ?>
このフィールドグループ設定した固定ページで、以下のように入力するとします。
表示される項目は、以下になります。

ループが何回目か確認する方法

ループの回数によって、文言を表示させたりしたい場合、何回目のループかカウントさせるようにしたいです。

その場合は、以下のように変数にインクリメント演算子を設定することで実装可能です。

<?php // 以下のようにカウンターを追加 ?>
<?php $loop_counter = 0; ?>

<?php if( have_rows('loop-item') ): ?>
  <?php while( have_rows('loop-item') ): the_row(); ?>

    <?php // カウンターが1以外の時(2回目のループ以外)に表示させる ?>
    <?php if( $loop_counter != 1 ): ?>
      <p><?php the_sub_field('item_1'); ?></p>
      <p><?php the_sub_field('item_2'); ?></p>
    <?php endif; ?>

    <?php // カウンターにループの回数を追加 ?>
    <?php $loop_counter++; ?>
  <?php endwhile; ?>
<?php endif; ?>

この処理では、以下のように2回目のループ以外の項目が表示されます。

ループの合計回数を確認する方法

続いて、ループ全体の合計回数を確認方法についてです。

こちらは、繰り返しフィールドの情報をテーブルなどで表示している場合に、「rowspan」属性などで個数が必要になる時に便利です。

<?php
// 繰り返しフィールドのすべての値を取得し、カウントする
$loop_item = get_field('loop-item');
$max_count = is_array($loop_item) ? count($loop_item) : 0;
?>

<p>繰り返しの合計回数は、<?= $max_count ?>です</p>

<?php if( have_rows('loop-item') ): ?>
  <?php while( have_rows('loop-item') ): the_row(); ?>
    <p><?php the_sub_field('item_1'); ?></p>
    <p><?php the_sub_field('item_2'); ?></p>
  <?php endwhile; ?>
<?php endif; ?>

こちらで合計回数を取得することができます。

まとめ

今回の記事では、ACFの繰り返しフィールドのループ回数を確認する方法について紹介しました。

場面によって必要な値は違うと思うので、ぜひ参考にしてください。