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

回答編集履歴

2

回答に間違いがあったため

2016/04/04 05:41

投稿

manabufukai
manabufukai

スコア700

answer CHANGED
@@ -1,4 +1,4 @@
1
- get_post_meta()post_custom()どちらできると思いますが
1
+ get_post_meta()or post_custom()でできると思いますが
2
2
 
3
3
  ## get_post_meta()で行う場合
4
4
 
@@ -9,10 +9,26 @@
9
9
 
10
10
  echoやprintなどは配列そのものを出力しようとすると、このようになります。
11
11
 
12
- 「チェックボックスがチェックされているかどうか」のデータも本来この配列の中に格納されていると思います。
12
+ ---
13
+ ### ※ saito.rukaさん回答を受け、当回答に間違いがありましたので修正しました。
14
+
15
+ 申し訳ないです、カスタムフィールドへ配列を格納した際の挙動について完全に失念していました。
16
+ [カスタムフィールドに配列を入れた場合のmeta_queryの記述](http://wood-roots.com/web%E5%88%B6%E4%BD%9C/wordpress-web%E5%88%B6%E4%BD%9C/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AB%E9%85%8D%E5%88%97%E3%82%92%E5%85%A5%E3%82%8C%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AEmeta_query%E3%81%AE%E8%A8%98)
17
+ > メタデータに配列を書き込んだ場合シリアライズされて保存される〜正しい結果を取得するためにはvalueにシリアライズ後の値を指定する必要があります。
18
+
19
+ また、get_post_meta()の第三引数をfalseにしなければなりませんでしたっけ?
20
+ と思って調べたら、同じブログに
21
+ [http://yahss.net/wordpress/1226-array_in_custom_fields/](http://yahss.net/wordpress/1226-array_in_custom_fields/)
22
+ という記事もありましたね…。
23
+
24
+ この記事内にある「チェックボックスは配列になる」のように
25
+ ここに配列として出てくる値に入っているのがチェックされた項目でしょうか。
26
+
27
+
13
28
  一旦、配列の中がどのような情報になっているかをまず知るためにも
14
29
  `var_dump(get_post_meta( $post->ID, 'esArea', false );)`
30
+ `var_dump(get_post_meta( $post->ID, 'esArea', true );)`
15
- で確認してみられてはいかがでしょうか?
31
+ 両方で確認してみられてはいかがでしょうか?
16
32
 
17
33
  実際に出力される際は、post_customの際に使われてらっしゃるように`foreach`で
18
34
  行えばよいでしょう。
@@ -35,15 +51,21 @@
35
51
  $itemsに対してexplodeしているのは何故でしょう?
36
52
  そのままpost_custom('esArea')を代入しておくだけでいいのでは…?
37
53
 
38
- 配列の中身が連結されてしまっているので出力がそのようになるのだと思います。
54
+ × 配列の中身が連結されてしまっているので出力がそのようになるのだと思います。
55
+ => シリアライズされた状態なのでそのような出力
39
56
 
57
+ 追記:フォーラムにこういった質問がありました
58
+ [カスタムフィールドのチェックボックスの使用(プラグイン不使用)](https://ja.forums.wordpress.org/topic/8942)
59
+ ここで書いてあるようにunserialize()するとよいと思います。
60
+
61
+
40
62
  あと、細かいところですが
41
63
  ul要素の直下の要素はli要素であるべきですが上記のコードを見るかぎりliが出力されていないので
42
64
 
43
65
  ```ここに言語を入力
44
- if( post_custom('esArea') ) {
66
+ if( get_post_custom('esArea') ) {
45
67
  echo "<ul>\n";
46
- $items = post_custom('esArea');
68
+ $items = unserialize( post_custom('esArea') );
47
69
  foreach($items as $value){
48
70
 
49
71
  //$valueにチェックボックスへのチェックが入っているかの判定
@@ -54,6 +76,6 @@
54
76
  echo "</ul>\n";
55
77
  }
56
78
  ```
57
- のようにしておくとよいと思います。
79
+ のようにしておくとよいと思います。(※未検証です)
58
80
  ※こちらで行う場合も前もって`$items`の中のデータがどのようになっているか、
59
- 予め`var_dump()`等で調べてから行うとよいと思います。
81
+ 予め`var_dump()`等で調べてから行うとよいと思います。

1

誤字の修正

2016/04/04 05:41

投稿

manabufukai
manabufukai

スコア700

answer CHANGED
@@ -7,7 +7,6 @@
7
7
  > ```
8
8
  > と記述すると「Array」と表示されてしまい
9
9
 
10
- Arrayとは「配列」を意味します。
11
10
  echoやprintなどは配列そのものを出力しようとすると、このようになります。
12
11
 
13
12
  「チェックボックスがチェックされているかどうか」のデータも本来この配列の中に格納されていると思います。