WordPressでカスタムフィールドを便利に使うプラグイン「Smart Custom Fields」と「Custom Field Suite」の狭間で揺れてみます。
カスタムフィールドを便利に使うプラグインといえば Advanced Custom Fields という有名プラグインを思い浮かべますが、敢えてそれを外します。理由は二つあります。使用テーブルの仕様についてと有料オプションのためですがその説明は割愛します。
さて自分のためのサイト構築では、入力補助や自動処理の大半をFileMakerでやっています。ですので特にカスタムフィールド関連のプラグインを必要としていません。
でも自分のためのサイトじゃない場合、編集者が判りやすいようにカスタムフィールドのキーを決めてあげたり、入力しやすい専用のメタボックスを表示してあげることはとても有効です。
そこで威力を発揮するのがカスタムフィールド関連のプラグイン。上記 Advanced Custom Fields のほか、Costom Field Template というのもありますね。以前は使っていたのですが多機能すぎて煩い感じがして今は使っていません。それ以外の選択肢でいいのが二つあります。
「Smart Custom Fields」と「Custom Field Suite」
同じような名前のこのふたつのプラグイン、名前だけじゃなくて使用目的も同じようなものだし、入力・設定の画面も似ています。
基本、カスタムフィールドの仕込みに威力を発揮します。あらかじめ決まったmeta_keyを登録して、投稿編集画面にメタボックスを表示します。
同じ名前(meta_key)に複数の値(meta_value)が存在するようなパターンにも対応しています。そういうのは「ループ」として処理します。
単独の値と複数の値
ちょっと余談になりますが、プログラムを囓っている人とそうではない人にとっての認識の隔たりというものがよくあります。その中でとりわけ大きいのが「単独の値か、複数の値か」についての重要度合いの認識差です。普通の人間にとって、ある名前(キー)に対する値が一つだろうとたくさんあろうと「それがどうかしたの?」という程度の認識で、私も昔はそうでした。でもプログラムの感覚では全然違うことで、とりわけカスタムフィールドでは単独の値を取り出す簡易な関数と、配列をループで取り出す処理を施すのでは全然違う処理になります。
そんなわけで Advanced Custom Fields では複数の値があるフィールドを作成することは有料オプションとなっております。「Smart Custom Fields」と「Custom Field Suite」ではどちらも無料のまま利用できて、これが大きなアドバンテージと考える人もいることでしょう。
ループ
一つの名前(キー)に複数の値があり得るカスタムフィールドを扱うとき、「Smart Custom Fields」も「Custom Field Suite」も「ループ」という機能を使います。配列だから当然ループでしょう、と思う人にとっては何ということもない話ですが、プログラムを知らない人にとっては「ループ?何のこと?意味わからん」となるみたいです。
まず「ループ」という枠をloopとして作成し、それからその個別の値を作って、loopの中に上手にドラッグしてやると配列で格納されるカスタムフィールドが作れます。
Smart Custom Fieldsでは「繰り返し」をONにすることでループ設定ができます。
ループのグループ
これに関する余談ですが。
WordPressのカスタムフィールドで痒いところに手が届かない一つの案件があります。カスタムフィールドをグループ化できないことです。特に複数の値を持つカスタムフィールド、これをグループ化したいときがあるでしょう。
例えば、関連するURLをカスタムフィールドに仕込みたいとき、キーが「関連リンク」だとしますね。「関連リンク」の値にはURLを入れていくでしょう。でももうひとつ、そこに「リンクテキスト」がほしいですよね。
それはこうなります。キー「link-text」とその値、キー「url」とその値という二つのカスタムフィールドがあって、それをグループ「url-set」にまとめたいと。
これは標準では出来ません。カスタムフィールド系プラグインでは全員できます。でもそれはプラグインが独自に工夫して付け加えた機能ですので、プラグインを使用停止したらもうそのデータはどうにもなりません。
カスタムフィールド便利プラグインを使うとき、その仕組みをある程度知っている必要がありますね。よいプラグインは限界ぎりぎりまで標準のテーブルを使用し、標準の関数を使います。限界を超えると独自テーブルや関数で乗り切ります。どの部分がそうなのか、これを利用者側もある程度知っていないと後々プラグイン縛りのため痛い目にあいます。
ちょっと細かい話
操作に関する細かい話でこれも余談ですが、フィールドを作るとき、まず新規フィールドを追加しますね。そしてラベルやキーを入力したり、値の種類(テキストや日付やループなど)を選んだりします。このとき、普通の感覚で先に名前やラベルを入力してから値の種類を選ぶと思うんですが、その挙動が両者まったく異なります。
Custom Field Suite では、名前やラベルを入力してから値の種類を選べます。もちろん値の種類を決めてから名前やラベルを入力しても何ら問題ありません。
Smart Custom Fields では、名前やラベルを入力してから値の種類を選ぶと、名前やラベルが消えてなくなります。つまり「先に値の種類を選んでからでないと名前を入力してはいけない」という強いルールがあります。これが地味に不便なところで、消えてなくなった名前を改めて作ろうとしたら「その名前はすでにあります」とエラーになって登録できなくなります。一旦破棄してやり直す必要があり、ちょっと腹立ちますが些細なことでもあります。
どちらか一方を選べない
さて余談が長くなりましたが(余談すぎるやろっ)、「Smart Custom Fields」と「Custom Field Suite」、このふたつの同じ使用目的のプラグインを実際に試して、どちらかを使おうと思っていたんですが結論としてはどちらかを選ぶことができませんでした。
似たような名前で同じ目的で設定画面もよく似たこのふたつのプラグイン、今は仕方なく両方をインストールして使っています。そんなことでいいのかと思いつつ、両方が必要なんだから仕方がない。なぜ両方必要なんでしょう。
どちらか一方を選べない理由
この二つのプラグインはほとんど同じですが決定的な違いがありました。その理由を簡潔に述べるとこの二つです。
- タームのtermmetaを扱えるかどうか
- 投稿のタームに応じてメタボックス表示をコントロールできるかどうか
タームのtermmeta
termmetaはタームのカスタムフィールドを扱うテーブルです。それって何ですのん?こうです。
投稿で使うカスタムフィールドと同じように、タームでカスタムフィールドを扱えます。たとえばカテゴリー「NEWS」があったとして、その「NEWS」そのものにカスタムフィールドが追加できます。カテゴリーごとの画像を用意したりできるわけですね。
昔はtermmetaがありませんでしたから、タームにカスタムフィールドのようなものをセットしようとしたら、オプションテーブルを使ったり専用テーブルを作ったり厄介なカスタマイズが必要でした。何らかのプラグインでそれらを行った場合、プラグインの使用をやめれば無駄なゴミにしかならないという状況でしたが、今ではWordPressの標準としてtermmetaテーブルやtermmeta関連の関数があります。
投稿のタームに応じた表示
投稿タームに応じたメタボックスというのは何のことでしょう。こうです。
例えばカテゴリー「NEWS」の投稿を下書き保存したら、カテゴリーが「NEWS」であるときにだけ、専用のカスタムフィールド入力ボックスを表示させることができるということです。これは需要あるでしょ?
この二つの機能、「Smart Custom Fields」と「Custom Field Suite」では、できるできないが逆転します。
Smart Custom Fields の特徴
- タームのtermmetaを扱える
- 投稿のタームに応じてメタボックス表示をコントロールできない
メタボックスを表示させる条件欄がありまして、ポストタイプ、ユーザー権限、そして何とタクソノミーが選べます。それは大変素晴らしいのですが、でも「投稿のターム」つまり例えばカテゴリーを条件に表示非表示をコントロールできません。
オプションページという謎の欄がありますが、作者の説明を見てもよく判りませんでした。コードを書ける人にとっては好きな条件が作れるそうですが調べても条件だけを追加することは出来ないみたいに思えました。
Custom Field Suite の特徴
- タームのtermmetaを扱えない
- 投稿のタームに応じてメタボックス表示をコントロールできる
メタボックスを表示させる条件欄では、ポストタイプ、ポストフォーマット、ユーザー権限、個別投稿ごと、分類(カテゴリー、タクソノミー)、固定ページテンプレートによって表示非表示をコントロールできます。豊富な選択肢が用意されていますね。でもすべてポストに対する条件で、タームのtermmetaはそもそも扱えません。
事細かに投稿または固定ページの編集画面で表示コントロールができます。カテゴリーやタクソノミーごと、何となれば一意の投稿にのみ表示させることもできます。
ということで両者気持ちいいくらい完璧に相反しています。そして、この二つの機能、私にはどっちも必要なんです。
結果、両方をインストールして使っています。同じ機能のプラグインを二つ同時使用してていいのかと思わなくもないですが。
使い分け
このように使い分けています。
タームで使用するとき → Smart Custom Fields
ポストで使用するとき → Custom Field Suite