advanced custom fieldsでチェックボックスの値を利用して出力するhtmlを変える(すべて出力する)方法。
copilotに尋ねた結果
<?php
$selected = get_field('checkbox_field_name');
if (in_array('option1', $selected)) {
echo '<p>選択肢1が選ばれました</p>';
}
if (in_array('option2', $selected)) {
echo '<p>選択肢2が選ばれました</p>';
}
?>
実際のコード
フィールドは「room_tobacco」で選択肢として、禁煙はno、喫煙はyes
<?php $selected = get_field('room_tobacco');
if (in_array('no', $selected)) {
echo '<span class="no-smoking"><i class="fa iconx-no-smoking"></i> 禁煙</span>';
}
if (in_array('yes', $selected)) {
echo '<span class="smoking"><i class="fa iconx-yes-smoking"></i> 喫煙</span>';
}
?>
こうすると、チェックボックス未入力の場合に$selectedの値がnullになり、「in_array(): Argument #2 ($haystack) must be of type array, null given」というエラーになる。
解決策1【nullチェックを追加する】-WordPressデバッグモードでエラー出ず
is_array()で配列かどうかを確認してからin_array()を使う
<?php $selected = get_field('room_tobacco');
if (is_array($selected) && in_array('no', $selected)) {
echo '<span class="no-smoking"><i class="fa iconx-no-smoking"></i> 禁煙</span>';
}
if (is_array($selected) && in_array('yes', $selected)) {
echo '<span class="smoking"><i class="fa iconx-yes-smoking"></i> 喫煙</span>';
}
?>
解決策2【(array)を入れる】
in_arrayの第2引数$selectedの前に(array)を入れる
<?php $selected = get_field('room_tobacco');
if (in_array('no', (array)$selected)) {
echo '<span class="no-smoking"><i class="fa iconx-no-smoking"></i> 禁煙</span>';
}
if (in_array('yes', (array)$selected)) {
echo '<span class="smoking"><i class="fa iconx-yes-smoking"></i> 喫煙</span>';
}
?>
解決策3【elseを入れて値が無い場合の処理をさせる】
<?php $selected = get_field('room_tobacco');
if (in_array('no', $selected)) {
echo '<span class="no-smoking"><i class="fa iconx-no-smoking"></i> 禁煙</span>';
}
if (in_array('yes', $selected)) {
echo '<span class="smoking"><i class="fa iconx-yes-smoking"></i> 喫煙</span>';
}
else {
echo '';
}
?>