質問するログイン新規登録

質問編集履歴

1

投稿後に試したことを追記しました。

2020/11/15 20:45

投稿

Web-Fuji
Web-Fuji

スコア29

title CHANGED
File without changes
body CHANGED
@@ -5,13 +5,14 @@
5
5
 
6
6
  【現状できていること】
7
7
  とりあえず、下記のphpコードで全部の選択肢は表示させることができました。
8
+ (参考サイト:https://www.advancedcustomfields.com/resources/get_field_object/)
8
9
  ```PHP
9
10
  <table>
10
11
  <tbody>
11
12
  <tr>
12
13
  <th>サンプル</th>
13
14
  <?php
14
- $field = get_field_object('sample');
15
+ $field = get_field_object('equipment01');
15
16
  if( $field['choices'] ): ?>
16
17
  <?php foreach( $field['choices'] as $value => $label ): ?>
17
18
  <td><?php echo $label; ?></td>
@@ -22,11 +23,98 @@
22
23
  </table>
23
24
  ```
24
25
 
25
- ご教示いただきたいこと
26
- ・チェックの付いた(選択された)項目「checked」というclassを付与する
26
+ 追記
27
+ も、下記コードでも試してました。
28
+ **試したコード①**(参考サイト:https://ja.wordpress.org/support/topic/wordpress-%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e3%80%8cadvanced-custom-fields%e3%80%8d%e3%81%ae%e3%83%81%e3%82%a7%e3%83%83%e3%82%af%e3%83%9c%e3%82%bf%e3%83%b3%e3%82%92%e5%87%ba%e5%8a%9b/)
29
+ ```PHP
30
+ <table>
31
+ <tbody>
32
+ <tr>
33
+ <th>サンプル</th>
34
+ <?php
35
+ // チェックされていない項目も含めてチェックボックス全体を取得
36
+ $field = get_field_object( 'equipment01' );
37
+ // チェックされている項目を取得(配列)
38
+ $equipment = get_field( 'equipment01' );
39
+ if ( empty( $equipment ) ) // 一つもチェックされていなければ空の配列にする
40
+ $equipment = array(); ?>
27
41
 
42
+ <?php // 選択肢ぜんぶをループ
43
+ foreach ( $field['choices'] as $key => $value ):
44
+ // $key : 選択肢の内部コード
45
+ // $value : 選択肢のラベル(AAA, BBB, CCC, DDD)
46
+ // 選択肢がチェックされていたらクラスを付ける
47
+ $checked = in_array( $key, $equipment ) ? 'class="checked"' : ''; ?>
48
+ <td <?php echo $checked; ?>><?php echo $value; ?></td>
49
+ <?php endforeach; ?>
50
+ </tr>
51
+ </tbody>
52
+ </table>
53
+ ```
54
+ 【①の結果】
28
- 以上です。(checkedクラスの付いたものに背景色を付けることは自分でき
55
+ var_dump($checked);がNULL、classが付与されせん
29
56
 
30
- どのようなphpコードを書くのか、はたまたfunctions.phpに記述するのか、どうすればいいのか全く検討も付いておりません。
31
57
 
58
+
59
+ **試したコード②**(参考サイト:https://stackoverflow.com/questions/31386261/add-class-to-acf-multi-select)
60
+ ```PHP
61
+ <table>
62
+ <tbody>
63
+ <tr>
64
+ <th>サンプル</th>
65
+ <?php
66
+ $equipment01 = get_field_object('equipment01');
67
+ $choices = $equipment01['choices'];
68
+ $values = $equipment01['value'];
69
+
70
+ if ( $equipment01 ):
71
+
72
+ foreach ( $choices as $key => $choice) {
73
+ $class = in_array($key, $values) ? 'class="checked"' : '';
74
+ echo '<td ' . $class . '>'. $choice .'</td>';
75
+ }
76
+ endif;
77
+ ?>
78
+ </tr>
79
+ </tbody>
80
+ </table>
81
+ ```
82
+ 【②の結果】
83
+ var_dump($class);がNULLで、classが付与されません。
84
+
85
+
86
+
87
+ **試したコード③**(参考:https://teratail.com/questions/231276)
88
+ ``` PHP
89
+ <table>
90
+ <tbody>
91
+ <tr>
92
+ <th>サンプル</th>
93
+ <?php
94
+ // チェックされていない項目も含めてチェックボックス全体を取得
95
+ $field = get_field_object( 'equipment01' );
96
+ // チェックされている項目を取得(配列)
97
+ $equipment = get_field( 'equipment01' );
98
+ if ( empty( $equipment ) ) // 一つもチェックされていなければ空の配列にする
32
- お手数おかけいたしますが、何卒よろしくお願いいたします。
99
+ $equipment = array(); ?>
100
+
101
+ <?php // 選択肢ぜんぶをループ
102
+ var_dump($checked);
103
+ foreach ( $field['choices'] as $key => $value ):
104
+ // $key : 選択肢の内部コード
105
+ // $value : 選択肢のラベル(AAA, BBB, CCC, DDD)
106
+ // 選択肢がチェックされていたらクラスを付ける
107
+ $checked = in_array( $key, $equipment ) ? ' checked' : ''; ?>
108
+ <td class="<?php echo $checked; ?>"><?php echo $value; ?></td>
109
+ <?php endforeach; ?>
110
+ </tr>
111
+ </tbody>
112
+ </table>
113
+ ```
114
+ 【③の結果】
115
+ var_dump($checked);がNULLで、classが付与されません。また、<li class>AAA</li>と出力されてしまいます。
116
+
117
+
118
+ 【ご教示いただきたいこと】
119
+ 以上、過去同じような事例で解決された方々のコードを色々と試しましたが、なぜか私の場合はclassが付与されません。
120
+ チェックの付いた(選択された)項目にのみ「checked」というclassを付与する方法について、何か原因や正しいコードなど、お分かりのことがございましたら、ご教示のほどよろしくお願いいたします。