ど素人から毛を生やす。<延>

カスタムフィールドテンプレートのグループ化の使い方。

Web > WordPress > プラグイン 2015年6月15日(最終更新:1年前)

このページは2015.6.15に作成されています。時代の流れとそぐわない可能性があったり、僕が今以上のど素人だった頃の記事だったりするので、新しい記事を探してみるのも良いかもしれません。

どもです。

WordPressでカスタムフィールドを使いたい場合、
「カスタムフィールドテンプレート」か、
「Advanced Custom Fields」の、
プラグインが代表的。

どちらにも利点があるのですが、個人的に、「カスタムフィールドテンプレート」の大きな利点は「利用者が入力欄を増やすことができる」ことだと思います。

利用例

例えば、
本文とは違う位置にイベントの日付を表示する必要があるけど、
このイベントの日付は全て表示しなければならず、
かつイベントの日数は不定であり、そのイベントごとで異なる
場合、
ひとつの入力欄に「○日、○日、○日…」と記載すれば手っ取り早いですが、
HTMLコードがある程度わかる方が利用者でなければ、タグの類は一切使えないことになります。

そんな感じのときに上手いことやってくれるのが「カスタムフィールドテンプレート」。

しかも、日付と曜日の両方別々に入力して、複雑なタグの中に出力できるのがグループ化です。
管理画面上はこんな感じになります。

h270615

「追加」を押すとグループが量産され、「削除」を押すと旧いグループを消せます。
グループの並び替えはできないようです。

で、これの作り方はこんな感じ。

入力編

[field0]
type = fieldset_open
legend = 日付
multipul = true
multipleButton = true

[day]
type = textfield
size = 35
label = 日付
blank = true

[week]
type = radio
value = mon # tue # wed # thu # fri # sat # sun
default = mon
label = 曜日

[field0]
type = fieldset_close

この場合、「field0」というグループの中に「day」と「week」というフィールドが入ります。
グループ名で中の入力フィールドを囲い、fieldset_openとfieldset_closeをそれぞれ設置という感じです。

なお、
multipul = true
multipleButton = true
は、この纏まりの量産(「追加」「削除」の出現)を管理するもの。

出力編

表示オプションからカスタムフィールドを選択し、実際に入力されている項目を見てみます。

h270615-2

(weekの方はちょっと遠かったので省略。)
同じ「day」という項目名で、2つの登録あります。グループ名の方は、量産されたフィールドの数が入っているようです。

また、WordPressのカスタムフィールドは、同名の項目は配列となって出力されます。
よってこの場合、「day」の中身をprint_rで出力すると、

[0]=>2015.5.26 [1]=>29

となります。

また、この画像を見ればわかりますが、カスタムフィールドテンプレートとは、
あくまでWordPressのカスタムフィールドを使い易くするものであって、
WordPressのカスタムフィールドに存在していない機能は持ちえていないのです。

つまり、このグループ化は見た目上のものであって、
データ上はばらばらに存在するカスタムフィールドであるということです。

ここを押さえた上で、データを出力します。

$day= post_custom('day');
$week= post_custom('week');
$field0 = post_custom('field0');

まず、それぞれの内容を変数に格納。

<?php if ( !empty( $field0 ) ): ?>
<div class="date">
<?php if( $field0 == 1 ){
        echo $day.'<span>'.$week.'</span>';
      }else{
        for( $i = 0; $i < $field0; $i++ ){
          echo $day[$i].'<span>'.$week[$i].'</span>';
          if( $i < $field0 -1 ){ echo '-'; }
        }
      } ?>
</div>
<?php endif; ?>

グループごとに呼び出したいので、ループを使います。
が、グループごとに配列になっているわけではないので、forを使います。

$field0は量産されたグループの個数になりますので、上手いことforで回せます。
但し、$field0が「個数」なのに対して、配列の番号は0から始まるので、
配列の最後の番号=$field0-1なことだけ気に留めておいた方が良さそうです。

また、面倒ですが変数が「配列の場合」と「配列でない場合」は同じ出力方法が使えません。
ので、$field0が1の場合とそうでない場合とで、始めにifを書いておきます。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった  (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (3)