advanced custom fieldsでチェックボックスの値を利用した条件分岐

Filed under: wordpressプラグイン — kdcs @ 25年7月11日 金曜日

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 '';
  }
?>

サイト内検索

カテゴリー

最近の投稿

« |advanced custom fieldsでチェックボックスの値を利用した条件分岐| »
↑上に戻る