以前 add_row 関数の記事を書いたのですが、繰り返しフィールドを入れ子にしたときの値の追加方法がわからなかったので調べてみた結果をまとめたいと思います。
入れ子になった繰り返しフィールドに値を追加するには add_sub_row 関数を使います。
add_row 関数の使い方は下の記事を参考です。
環境
- WordPress 5.4.4
- ACF 5.8.7
フィールドグループ
あまり機会はないと思いますが、次のような繰り返しフィールドを入れ子状態にせざる得なかった場合を考えてみます。
- フィールド名:uncle
- サブフィールド :father
- サブフィールドのサブフィールド:grandson
フィールドグループを表示している場所はACF(Advanced Custom Fields)のオプションページとしています。
フィールドグループの設定は下記のようにオプションページに反映されています。
add_sub_row の使い方
サブフィールドのサブフィールド「grandson」の繰り返しフィールドに値を追加するプログラムは下記のように書きます。
$row = array(
'grandson' => '孫'
);
$post_id = 'option';
add_sub_row(array('uncle', 1, 'father'), $row, $post_id);
上のプログラムを実行すると次のようになります。
サブフィールド grandson に「孫」が挿入されました。
注意点1
add_sub_row の第一引数に渡したarray内の2番目の数字は array(‘uncle’, 1, ‘father’) 上の画像のオレンジ色の枠のことを指します。
つまり、数字を2に変えると2行目のサブフィールドに値を追加します。
注意点2
上の画像のように入れ子の入れ子のサブフィールド(今回の場合、「孫:grandson」)を用意せずにプログラムを実行するとデータベースには追加した内容は反映されていますが、管理画面には結果が表示されません。
データベース上ではサブフィールドの father の1行目が存在していない状態と解釈されており、プログラムがサブフィールドのサブフィールドに値を追加したものの、サブフィールドにはまだ値が追加されていないと解釈されてしまっているようでした。