2010
02.26

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>

1 comment so far

Add Your Comment
  1. ありがとうございます!!!
    >数が不定の複数項目を同列でリスト出力したい場合などに、
    >同じキーの入力フィールドを追加していける機能があるのですが、
    >入力した順に記録されず順番がばらばらになってしまいます。
    これで昨日から悩んでいたので、とっても助かりました!!

    >そこで、入力フィールドはひとつにしておいて、
    >テキストエリアにしておきます。
    >入力時には項目ごとに区切り文字を入れて入力してもらい、
    >表示の際に、区切り文字で分割して配列にほりこみ、
    >foreachなどでまわすとスムーズ且つスマートです。
    そんなやり方があったのですね!!
    知りませんでした(WordPress初心者なもので)

    ありがとうございました!!!
    とっても勉強になりました。
    感謝、感謝、大感謝です(T_T)