ACF 柔軟コンテンツの表示方法

ACF 柔軟コンテンツの表示方法

WordPress のプラグイン ACF の柔軟コンテンツ(Flexible Content)の表示方法を紹介します。
柔軟コンテンツを使うと、コンテンツを自由に管理できるレイアウト(サブフィールドグループ)を追加することができます。
例えば、写真や動画を交互に入れられるようなオリジナルのページを作りたい時に便利な機能です。

  1. 柔軟コンテンツとは?
  2. 柔軟コンテンツの設定方法
  3. 柔軟コンテンツの基本的な表示方法
  4. 柔軟コンテンツにリピーターを入れ子にする表示方法
  5. 柔軟コンテンツに今の柔軟コンテンツを入れ子にする方法
  6. まとめ

1.柔軟コンテンツとは?

リピーターフィールドと同様にこのフィールドにはサブフィールドが含まれています。
このフィールドにはレイアウトを自由に追加することができますが、追加できるレイアウトを最初に定義する必要があります。
柔軟コンテンツ(Flexible Content)は、ACFの有料機能になります。

2.柔軟コンテンツの設定方法

柔軟コンテンツを設定内容は次の通りです。

Layouts
レイアウト
リピーターフィールドと同様に、このフィールドにはサブフィールドが含まれています。このフィールドは、レイアウトとして自由に追加することができます。
追加できるレイアウトは、あなたが欲しいと思う内容を事前に定義する必要があります。
Button Label
ボタンラベル
レイアウトを追加するためのボタンの名称を設定します。
初期設定は “Add Row” です。
Minimum Layouts
最小レイアウト
レイアウトの最小設定数を指定します。
Maximum Layouts
最大のレイアウト
レイアウトの最大設定数を指定します。

3.柔軟コンテンツの基本的な表示方法

柔軟コンテンツの基本的な表示方法を紹介します。
次のコードは、レイアウト名1とレイアウト名2というレイアウトを作成した場合、各レイアウトに任意のサブフィールドを設定してある時の表示方法です。

<?php if( have_rows('フィールド名') ): //柔軟コンテンツフィールドの値を持っているかどうかをチェック ?>
<?php while ( have_rows('フィールド名') ) : the_row(); //値のループ ?>
<?php if( get_row_layout() == 'レイアウト名1' ): //レイアウト名1があった場合に出力 ?>
<?php the_sub_field('コンテツフィールド名1'); //柔軟コンテンツ内は'the_sub_field'や'get_sub_field'を使用 ?>
<?php elseif( get_row_layout() == 'レイアウト名2' ): //レイアウト名2があった場合に出力 ?>
<?php the_sub_field('コンテツフィールド名2'); //柔軟コンテンツ内は'the_sub_field'や'get_sub_field'を使用 ?>
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>

コメント無しはこちら

<?php if( have_rows('柔軟コンテンツ') ): ?>
<?php while ( have_rows('柔軟コンテンツ') ) : the_row(); ?>
<?php if( get_row_layout() == 'レイアウト1' ): ?>
<?php the_sub_field('フィールド'); ?>
<?php elseif( get_row_layout() == 'レイアウト2' ): ?>
<?php the_sub_field('フィールド'); ?>
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>

各フィールド名は、作ったフィールドに合う任意の名前に変更してください。

4.柔軟コンテンツにリピーターを入れ子にする表示方法

柔軟コンテンツとリピーターを入れ子にする場合の表示方法を紹介します。

<?php if( have_rows('フィールド名') ): //柔軟コンテンツフィールドの値を持っているかどうかをチェック ?>
<?php while ( have_rows('フィールド名') ) : the_row(); //値のループ ?>
<?php if( get_row_layout() == 'レイアウト名1' ): ?>
<!— レイアウト名1の出力 -->
<?php elseif( get_row_layout() == 'レイアウト名2' ): ?>
<!— レイアウト名2にリピーターフィールドがあるかの判別 -->
<?php if( have_rows('リピーターフィールド名') ): //リピーターフィールドの値を持っているかどうかをチェック ?>
<?php while ( have_rows('リピーターフィールド名') ) : the_row(); //値のループ ?>
<?php the_sub_field('image'); ?>
<?php endwhile; ?>
<?php endif; ?>
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>

リピーターの詳しい表示方法はAdvanced Custom Feld のアドオン Repeater Field の表示方法を御覧ください。

5.柔軟コンテンツに今の柔軟コンテンツを入れ子にする方法

イレギュラーなケースですが、柔軟コンテンツ(A)の中に同じ柔軟コンテンツ(A)を入れ子にしたい場合は、柔軟コンテンツ(A)を配列化(A’)して、その配列を柔軟コンテンツ(A)で読み込む方法をお勧めします。
配列の作り方は「PHP foreachを使って配列を作る方法」を参考にご覧ください。

まとめ

WordPress のプラグイン ACF の柔軟コンテンツ(Flexible Content)の表示方法を紹介しました。
仕組みを理解するのに苦労しますが慣れてしまえば大丈夫! まずはいろいろ試してみましょう。