WordPress にはカスタムフィールドを使って入力をラクにすることができますけど、1つだけ難点があるんですよね。
それは、デフォルトの「検索」ではひっかからないこと。
どうすれば良いのか記事を探してみると、「Custom Fields Search」というプラグインがよく紹介されているんですが、古すぎて使い物にならないんですよ。
だからと言って、自分で頑張って PHP をいじるのも大変ですよね。
私も記事を探してみると大した情報が出てこなかったので、使えるプラグインがないか調べたら見つかりました!
もくじ
「Relevanssi」の使い方
検索を自由に操れるプラグイン「Relevanssi – A Better Search」は、投稿・固定ページ・タグ・カテゴリーなどに分けて「検索」を有効にしたり無効にしたりが可能となります。
>> https://ja.wordpress.org/plugins/relevanssi/
そして、このプラグインは本題である「カスタムフィールド」も検索範囲として設定もできるんです。
カスタムフィールドを有効にする手順
「Relevanssi – A Better Search」を有効にしたら、カスタムフィールドも検索範囲にする設定をする必要があります。
プラグインの設定をクリックしたら、「Indexing」のタブを開きます。
そして、「Indexing」のページから「Custom fields」を探してください。デフォルトではこの項目が「none」になっているはずなので、これを「all」「visible」「some」のいずれかを選択して「Save the options」を押せば完了。
「all」を選択した場合
「all」を選択すると、カスタムフィールドに入力された内容が検索の対象となります。
「visible」を選択した場合
「visible」を選択すると、カスタムフィールドに入力しただけでは検索対象とならずに、ページで表示された文字だけが対象となります。
「some」を選択した場合
「some」を選択すると入力欄が表示されるので、そこに指定した文字だけが検索対象となって表示されるようになります。
文字が一致かどうかを設定する手順
検索において、入力された文字をどのような状態で対象とするかを設定できます。
条件を満たすか含めるか
「Searching」タブを開いたら、「Default operator」の項目を「OR」か「AND」のどちらかを選択をします。
ここでは「OR」がデフォルトになっていて、「OR」のままなら複数検索された場合でもどちらかに含まれていれば検索対象となります。
「AND」の場合は複数検索されたら、その条件と同じ対象の記事だけが表示されるようになります。
文字を完全一致にするかどうか
同じく「Searching」のタブにある「Keyword matching」の項目では、検索された時に完全一致でのみ検索範囲とするとか、部分的に同じであれば対象とするかを選べます。
「Partial words」がオススメとなっていて、これを選択していると部分的に同じであれば検索対象となります。
「Whole words」は完全一致した時だけが対象となるので、よっぽど厳密に対象を分けたいとき以外には使うことはないと思います。
検索結果でフィールドの内容を表示する手順
「Custom fields」で「all」「visible」「some」のいずれかを選択すればそれで基本は完了なんですけど、それで検索した場合には通常のエディターに入力された内容だけが「記事の抜粋文」として表示されます。
そこで、もしカスタムフィールドの内容を抜粋部分に表示したい場合には、「Excerpts and Highlights」のタブを開いて「Use custom fields for excerpts」の項目にチェックを入れます。
それで検索語句を入れるみると、カスタムフィールドに表示されている文字がハイライトされた状態で抜粋が表示されます。
たまに前後で変な文字列がそのまま表示されることもあるので、「Length of the snippet」で単語数などを調整しても良いと思います。
さいごに:Relevanssi って便利
カスタムフィールドに関する記事自体があまりない、というか古い記事がやたらと多いのですが、最近は利用する人が少なくなってきているということなんですかね。
ちょっと話がずれましたが、「検索」の設定に関しても古い記事ばかりだったので少しでも情報更新できればと思って記事にしました。
「Relevanssi」の場合はデフォルトの「検索」を使った機能拡張となるので、ECサイトのような値段範囲を設定して検索するような拡張はできません
でも複数検索はできるので、小規模のECサイトでも活用できると思います。