WordPressをCMSとして使用する際、細分化した定型の項目を、カスタムフィールドを使って入力してもらうようにすると、更新時のトラブルも少なくウマーです。
私はCustom Field Templateを使ってほぼ全ての内容をカスタムフィールドで入力してもらうようにしています。
数が不定の複数項目を同列でリスト出力したい場合などに、同じキーの入力フィールドを追加していける機能があるのですが、入力した順に記録されず順番がばらばらになってしまいます。
そこで、入力フィールドはひとつにしておいて、テキストエリアにしておきます。入力時には項目ごとに区切り文字を入れて入力してもらい、表示の際に、区切り文字で分割して配列にほりこみ、foreachなどでまわすとスムーズ且つスマートです。
区切り文字の代わりに改行を使ってもいいです。(その場合は”\n”で分割する)
(例_1)
カスタムフィールド
キー:instruments
値:ボーカル,ギター,ベース,オルガン,ドラム
テーマのループ内で
if( post_custom('instruments') ) { echo "<ul>\n"; $items = explode("," , post_custom('instruments')); foreach($items as $value) { echo "<li>".$value."</li>\n"; } echo "</ul>\n"; }
出力
<ul> <li>ボーカル</li> <li>ギター</li> <li>ベース</li> <li>オルガン</li> <li>ドラム</li> </ul>
(例_2)
キー:band
値:
ジョン,ギター/ボーカル/コーラス
ポール,ギター/ボーカル/コーラス
ジョージ,ベース/コーラス
リンゴ,ドラム/コーラス
if( post_custom('band') ) { echo "<dl>\n"; $band = explode("\n" , post_custom('band')); foreach($band as $member) { $part = explode("," , $member); echo "<dt>".$part[0]."</dt>\n"; echo "<dd>"; $inst = explode("/" , $part[1]); if($inst[1]) { echo "\n<ul>\n"; foreach($inst as $inst) { echo "<li>".$inst."</li>\n"; } echo "</ul>\n"; } else { echo $inst[0]; } echo "</dd>\n"; } echo "</dl>\n"; }
↓
<dl> <dt>ジョン</dt> <dd> <ul> <li>ギター</li> <li>ボーカル</li> <li>コーラス</li> </ul> </dd> <dt>ポール</dt> <dd> <ul> <li>ギター</li> <li>ボーカル</li> <li>コーラス</li> </ul> </dd> <dt>ジョージ</dt> <dd> <ul> <li>ベース</li> <li>コーラス</li> </ul> </dd> <dt>リンゴ</dt> <dd> <ul> <li>ドラム</li> <li>コーラス</li> </ul> </dd> </dl>