質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

4231閲覧

カスタムフィールドのチェック項目の表示

junkin_net

総合スコア13

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/03/31 14:40

編集2016/04/03 14:24

manabufukai様ご丁寧にありがとうございます。

ご質問の件、再度具体的に書かせて頂きます。
どなたかご教示願えれば幸いです。

カスタムフィールドのカスタマイズの件でご質問です。
http://yahss.net/wordpress/587-custom_post_type_and_custom_field/
上記記事を参考にカスタムフィールドを実装した際に、
チェックボックスの「エリア」の部分で、チェックをした項目をアイコン表示するためにはどのような記述をすれば宜しいでしょうか。

例えば、
「住宅街」と「商店街」にチェックをした際に、
カスタム投稿タイプの詳細ページに

<ul> <li class="ico-2">住宅街</li> <li class="ico-3">商店街</li> </ul>

のようにチェックしたのだけを上記のように<li>で囲んで表示するためには、どのように記述したら宜しいでしょうか。

可能であれば、アイコンごとに色を変えたく<li>にそれぞれクラス名を付加したりなんてことは出来るのでしょうか。

テンプレートに、

<?php echo get_post_meta( $post->ID, 'esArea', false ); ?>

と記述すると「Array」と表示されてしまい、

<?php if( post_custom('esArea') ) { echo "<ul>\n"; $items = explode("\n" , post_custom('esArea')); foreach($items as $value){ echo $value ."<br />" ; } echo "</ul>\n"; } ?>

と記述してみると
「a:2:{i:0;s:9:"住宅街";i:1;s:9:"商店街";}」
このように表示されてしまいます・・・。

恐れ入ります。
どなたかご教示願えれば幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

manabufukai

2016/04/01 13:22

「アイコンを表示するように」の箇所ですが、アイコンはどこに、どのように(Ex.サムネイル画像etc)といったように具体的に書いていただいたほうが回答しやすいと思います。
guest

回答3

0

a:2:{i:0;s:9:"住宅街";i:1;s:9:"商店街";}

これは配列をシリアライズ化したものになっているのでPHPのunserialize関数を使うと配列に戻せます。

後は回して整形すればliの形式に出力できるかと思われます。

投稿2016/04/04 00:13

saito.ruka

総合スコア138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

manabufukai

2016/04/04 04:21 編集

そうでした…カスタムフィールドに配列を渡したり update_post_meta()するとシリアライズされるんでしたね…
junkin_net

2016/04/05 15:26

saito.ruka様 ご丁寧にご回答ありがとうございます。 大変勉強になりました。 ありがとうございます。
guest

0

ベストアンサー

get_post_meta()or post_custom()でできると思いますが

get_post_meta()で行う場合

<?php echo get_post_meta( $post->ID, 'esArea', false ); ?>

と記述すると「Array」と表示されてしまい

echoやprintなどは配列そのものを出力しようとすると、このようになります。


※ saito.rukaさん回答を受け、当回答に間違いがありましたので修正しました。

申し訳ないです、カスタムフィールドへ配列を格納した際の挙動について完全に失念していました。
カスタムフィールドに配列を入れた場合のmeta_queryの記述

メタデータに配列を書き込んだ場合シリアライズされて保存される〜正しい結果を取得するためにはvalueにシリアライズ後の値を指定する必要があります。

また、get_post_meta()の第三引数をfalseにしなければなりませんでしたっけ?
と思って調べたら、同じブログに
http://yahss.net/wordpress/1226-array_in_custom_fields/
という記事もありましたね…。

この記事内にある「チェックボックスは配列になる」のように
ここに配列として出てくる値に入っているのがチェックされた項目でしょうか。

一旦、配列の中がどのような情報になっているかをまず知るためにも
var_dump(get_post_meta( $post->ID, 'esArea', false );)
var_dump(get_post_meta( $post->ID, 'esArea', true );)
両方で確認してみられてはいかがでしょうか?

実際に出力される際は、post_customの際に使われてらっしゃるようにforeach
行えばよいでしょう。

post_custom()で行う場合

<?php if( post_custom('esArea') ) { echo "<ul>\n"; $items = explode("\n" , post_custom('esArea')); foreach($items as $value){ echo $value ."<br />" ; } echo "</ul>\n"; } ?>

$itemsに対してexplodeしているのは何故でしょう?
そのままpost_custom('esArea')を代入しておくだけでいいのでは…?

× 配列の中身が連結されてしまっているので出力がそのようになるのだと思います。
=> シリアライズされた状態なのでそのような出力

追記:フォーラムにこういった質問がありました
カスタムフィールドのチェックボックスの使用(プラグイン不使用)
ここで書いてあるようにunserialize()するとよいと思います。

あと、細かいところですが
ul要素の直下の要素はli要素であるべきですが上記のコードを見るかぎりliが出力されていないので

if( get_post_custom('esArea') ) { echo "<ul>\n"; $items = unserialize( post_custom('esArea') ); foreach($items as $value){ //$valueにチェックボックスへのチェックが入っているかの判定 //もし判定がtrueなら echo "<li class="ico-2">" . $value . "</li>"; //判定がfalseなら echo "<li>" . $value . "</li>" ; } echo "</ul>\n"; }

のようにしておくとよいと思います。(※未検証です)
※こちらで行う場合も前もって$itemsの中のデータがどのようになっているか、
予めvar_dump()等で調べてから行うとよいと思います。

投稿2016/04/03 17:05

編集2016/04/04 05:41
manabufukai

総合スコア700

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

junkin_net

2016/04/05 15:24

manabufukai様 ご丁寧にご回答頂きありがとうございます。 理想どおり表示されました。 本当にありがとうございました。
guest

0

ここに配列で入っていると思います。

PHP

1get_post_meta( $post_id, 'esArea', false );

用例も多く、記事なども探しやすい Advanced Custom Fields など、カスタムフィールド用プラグインを使われることをお勧めします。

投稿2016/03/31 16:09

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問