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

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

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

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)
  • (`・ω・´) 役に立った (11)