スポンサーリンク

【WordPress】Advanced Custom Fieldでネストされたリピーターフィールドのサブフィールドの初期値を設定する

ネストとは、”入れ子”になったという意味で、例えば下記のような構造です。

Field X (Type: Repeater Field)
	Sub Field A1 (Type: Text)
	Sub Field A2 (Type: Repeater Field)
		Sub Field A2' (Type: Text)

“Sub Field A1″のような、リピーターフィールドのサブフィールドの初期値を自動追加するコードは既に公開されていた文献を見付けました。

Add default values to ACF Repeater Fields

“Sub Field A2″のような、リピーターフィールドのサブフィールドとして存在するリピーターフィールドのサブフィールドで同じようなことをする場合は、連想配列をもう1つ作る必要があります。

具体的には下記のようになります。

function acf_load_repeater_value($value, $post_id, $field) {
    if ( get_post_status( $post_id ) === 'auto-draft' ) {
        if( get_post_type( $post_id ) == 'post' ){ // 投稿タイプ指定
            $openTimes = array();
            $times = array(
                '10:00-11:00',
                '11:00-12:00',
                '12:00-13:00',
                '13:00-14:00',
                '14:00-15:00'
            );
            foreach ($times as $key => $time) {
                $openTimes[] = array(
                    '<SubFieldKey>' => $time
                );
            }
            $value = array();
            for ( $i = 1; $i <= 3; $i++ ) {
                $value[] = array(
                    '<ChildRepeaterFieldKey>'=> $openTimes
                );
            }            
        }
    }
    return $value;
}
add_filter('acf/load_value/key=<ParentRepeaterFieldKey>', 'acf_load_repeater_value', 10, 3);

<ParentRepeaterFieldKey>は親のリピーターフィールド(例では”Field X”)のフィールドキー、<ChildRepeaterFieldKey>は親の子のリピーターフィールド(例では”Sub Field A2″)のフィールドキー、<SubFieldKey>は子のリピーターフィールド(例では”Sub Field A2′”)のサブフィールドキーです。

なお、「フィールドキー」については、ACFフィールドグループ管理画面で「表示オプション」を展開して「フィールドキー」にチェックを入れると表示されるようになります。

タイトルとURLをコピーしました