WordPressのAdvanced Custom Fieldsのグループブロックで、すべてのサブフィールドの値が空のときにfalseがほしい!というときに使える、「連想配列の値がすべて空だったらfalseを返す方法」をご紹介します!
目次
先に結論
array_filter()
を使う。
$group_judge = array_filter($testgroup);
if($group_judge){
}
※直接 if(array_filter($group))
としても動く気がする
Advanced Custom Fieldsで「グループ」を使ったときに使える
WordPressのAdvanced Custom Fieldsで「グループ」を使ってフィールドをグルーピングした時のこと。
入力がないときは、値の周りのHTMLタグも出したくないとします。
<?php $test01 = get_field('test01'); ?>
<?php $test02 = get_field('test02'); ?>
<?php $testgroup = get_field('test-group'); ?>
<?php if ($test01): ?>
<p>
テスト01:<?php echo $test01; ?>
</p>
<?php endif; ?>
<?php if ($test02): ?>
<p>
テスト02:<?php echo $test02; ?>
</p>
<?php endif; ?>
<?php if ($testgroup)://★サブフィールドの値の有無を確認したいけど動かない!★ ?>
<div>
<h2>グループ</h2>
<?php if ($testgroup['sub01']): ?>
<p>
サブフィールド1:<?php echo $testgroup['sub01']; ?>
</p>
<?php endif; ?>
<?php if ($testgroup['sub02']): ?>
<p>
サブフィールド2:<?php echo $testgroup['sub02']; ?>
</p>
<?php endif; ?>
</div>
<?php endif; ?>
でもこれだと動きません消えません。値がないとき、こんな感じの残念な仕上がりに。
<div>
<h2>グループ</h2>
</div>
if(get_field(‘[サブフィールド名]’))がfalseにならない理由
var_dump()
で中身を見てみると…まずはarray(配列)になっていて、中身が2個入っています。
それぞれの値は空でもキーのほうは存在するので、中身が2個ある扱いになります。
array (size=2)
'sub01' => string '' (length=0)
'sub02' => string '' (length=0)
つまり空ではないので、空かどうかの判定をしようとしてもできないわけです。
グループ内のサブフィールドすべてに値がなかったら空だということにしたい
すべてのサブフィールドに値がなかったら空だということにするために、配列操作用の関数を使います。
array_filter()
基本的な使い方は以下の通り。
$original_arr = [1,2,3,4,5,6];
//$original_arr をもとに、$new_arrを作る
//各値を$numとして $num>3 が trueになるものだけ、新しい配列に入れる
$new_arr = array_filter($original_arr,function($num){
return ($num>3);
});
print_r($original_arr);
// → Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
print_r($new_arr);
// → Array ( [3] => 4 [4] => 5 [5] => 6 )
ただ、今回は第2引数を使わずに array_filter($array)
の形で使います。
//$testgroup をもとに、$group_judgeを作る
//各値が存在すればtrue、空ならfalseの扱いになる
//trueになるものだけ、新しい配列に入れる
$group_judge = array_filter($testgroup);
このようにすると、サブフィールドの値がすべて空の場合、新しい配列の中身は完全に空になります。
もちろん、値が入っているサブフィールドがあれば、それは新しい配列に入ります。
連想配列の値がすべて空だったらfalseを返したいときは array_filter()を使う
つまり以下のコードですべてのサブフィールドの値が空ならfalseという条件分岐ができるというわけです!
$group_judge = array_filter($testgroup);
if($group_judge){
}
コメント