advanced custom fields(アドバンスドカスタムフィールド)

advanced custom fields(アドバンスドカスタムフィールド) Groupフィールドの出力

advanced custom fields(アドバンスドカスタムフィールド) Groupフィールドの出力で時々はまることがある。
結構癖の強いコマンドだ。

advanced custom fields(アドバンスドカスタムフィールド) Groupフィールドの出力

まず、advanced custom fields(アドバンスドカスタムフィールド)のGroupフィールドのポインタの当て方は、

has_sub_field(‘フィールド名’)

だから、以下のような構造になる。

if( has_sub_field('グループフィールド名') ){
$グループフィールドに所属するフィールド名 = get_sub_field('グループフィールドに所属するフィールド名')


つまり、こういった構造の場合
グループフィールド
フィールド


複数のグループフィールドを出力する

例えば、以下のような構造で、

グループフィールド1(group1)
フィールド1-1(group1in1)
フィールド1-2(group1in2)
グループフィールド2(group2)
フィールド2-1(group2in1)
フィールド2-2(group2in2)
グループフィールド3(group3)
フィールド3-1(group3in1)
フィールド3-2(group3in2)

以下のような出力を期待するとき、

通常ならば、
<div style="border:1px solid #ccc;padding:5px;margin5px;">
if(has_sub_field('group1')){
$group1in1 = get_sub_field('group1in1');
$group1in2 = get_sub_field('group1in2');
<div style="float:left;border:1px solid #ccc;padding:5px;margin5px;">
if(group1in1!="){ echo group1in1; }
if(group1in2!="){ echo group1in2; }
</div>
}
if(has_sub_field('group2')){
$group2in1 = get_sub_field('group2in1');
$group2in2 = get_sub_field('group2in2');
<div style="float:left;border:1px solid #ccc;padding:5px;margin5px;" class="clearfix">
if(group2in1!="){ echo group2in1; }
if(group2in2!="){ echo group2in2; }
</div>
}
if(has_sub_field('group3')){
$group3in1 = get_sub_field('group3in1');
$group3in2 = get_sub_field('group3in2');
<div style="border:1px solid #ccc;padding:5px;margin5px;">
if(group3in1!="){ echo group3in1; }
if(group3in2!="){ echo group3in2; }
</div>
}
</div>


さらに、グループ1,2,3いずれも存在しない場合は、このボックスを出力したくない。

普通に考えると
if( has_sub_field('group1') && has_sub_field('group2') && has_sub_field('group3') ){
<div style="border:1px solid #ccc;padding:5px;margin5px;">
if(has_sub_field('group1')){
if(group1in1!="){ echo group1in1; }
if(group1in2!="){ echo group1in2; }

で、いいような気がする。
でもだめ。

3つの has_sub_field を重ねると、その次にくる has_sub_field が false を返してくる。
したがって上の処理は、こう書くと安全
group1flag=0;
group2flag=0;
group3flag=0;
if(has_sub_field('group1')){
group1flag=1;
$group1in1 = get_sub_field('group1in1');
$group1in2 = get_sub_field('group1in2');
}
if(has_sub_field('group2')){
group2flag=1;
$group2in1 = get_sub_field('group2in1');
$group2in2 = get_sub_field('group2in2');
}
if(has_sub_field('group3')){
group3flag=1;
$group3in1 = get_sub_field('group3in1');
$group3in2 = get_sub_field('group3in2');
}
if( group1flag==1 && group2flag==1 && group3flag==1 ){
<div style="border:1px solid #ccc;padding:5px;margin5px;">
if( $group1==1 ){
<div style="float:left;border:1px solid #ccc;padding:5px;margin5px;">
if(group1in1!="){ echo group1in1; }
if(group1in2!="){ echo group1in2; }
</div>
}
if( $group2==1 ){
<div style="float:left;border:1px solid #ccc;padding:5px;margin5px;" class="clearfix">
if(group2in1!="){ echo group2in1; }
if(group2in2!="){ echo group2in2; }
</div>
}
if( $group2==1 ){
<div style="border:1px solid #ccc;padding:5px;margin5px;">
if(group3in1!="){ echo group3in1; }
if(group3in2!="){ echo group3in2; }
</div>
}
</div>
}

つまり、先にそれぞれの has_sub_field で状態検査、ポインタ固定、データ取得。
その後、出力の形にする。

以外にはまりやすいのでご注意ください。

※ソースの確認がわかりにくくなるので phpとhtml の切り替えは省略してあります。


スポンサードリンク

関連記事一覧