WordPressのプラグイン「Advanced Custom Fields」で、チェックボックス(セレクトボックス)の値を、選択してないやつも含めて全部取得したい。
例えば、「月火水木金土日」という選択肢があって、「火水」しか選択してなくても、とりあえずリストとして全部表示させたいわけである。
これはけっこう長いこと悩んでいて、あれこれややこしい方法で実装してみては「ほんまにこれしかないんか…」と調査しまくっていたが、ついにめっちゃ簡単な方法を見つけたので備忘録。
実装
関数”get_field_object()”を使う。
例えば、”custom_week”というカスタムフィールドに、「月~日」の選択肢を用意しており、更に土日を選択しているとき、値は以下のようになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
$week = get_field_object('custom_week'); echo '<pre>'; var_dump($week); echo '</pre>'; // 以下、出力部分 array(15) { ["key"]=> string(19) "field_59b111613d05f" ["label"]=> string(9) "営業日" ["name"]=> string(14) "custom_week" ["_name"]=> string(14) "custom_week" ["type"]=> string(8) "checkbox" ["order_no"]=> int(1) ["instructions"]=> string(0) "" ["required"]=> int(0) ["id"]=> string(24) "acf-field-custom_week" ["class"]=> string(8) "checkbox" ["conditional_logic"]=> array(3) { ["status"]=> int(0) ["allorany"]=> string(3) "all" ["rules"]=> int(0) } ["choices"]=> array(7) { ["月"]=> string(3) "月" ["火"]=> string(3) "火" ["水"]=> string(3) "水" ["木"]=> string(3) "木" ["金"]=> string(3) "金" ["土"]=> string(3) "土" ["日"]=> string(3) "日" } ["default_value"]=> string(0) "" ["layout"]=> string(10) "horizontal" ["value"]=> array(2) { [0]=> string(3) "土" [1]=> string(3) "日" } } |
“var_dump()”でデバッグしてしまえばだいたいわかるけど、この場合
“$week[‘choices’]”
で選択肢を配列で全部取得できる。あとはforeachで回すなりなんなり好きにしちゃいましょう!
繰り返しフィールドだろうとなんだろうと、get_field_object()で全値をとって、var_dump()で中身を見てしまえばなんだってできるね。
以上、現場からでした。