タイトルの頭文字で絞り込むをWordPressで
共有してくれる人はいないと思いますが、備忘録として掲載。
ブログを国産CMSのGsBLOGから、グローバルスタンダードとも言えるWordpressに乗り換えて数ヶ月。
その奥深さに惚れ惚れしている今日この頃なんですが、以前のブログで併設していたALFEE楽曲データベースをこのWordpressへ少しずつ移行してました。
そもそもWordpressはブログ用のエンジン。
それに楽曲データベースを組み込むこと自体無茶苦茶な話なんですが、そこは持ち前の拡張性を活かすことで、良い感じに出来つつあったりします。
基本的に、楽曲やリリース媒体個々をひとつの投稿として扱い、作曲、作詞、リリース日などの情報はカスタムフィールドに持たせるようにしました。
細かい構成はまた後日と言うことで、今日はそのインタフェースを改善するのに、ちょっと四苦八苦したので、そのことを書留めておこうと思います。
ALFEEデータベースのレコード数は、楽曲で300、アルバムなどの媒体は200。
これをただ羅列するだけじゃあ、見たい情報にたどり着くのに難儀します。
そこで考えたのが、タイトルの頭文字で絞り込むインターフェースを追加すること。
σ(^^)が愛用しているミュージックサーバSqueezebox Serverがこのインターフェースで、無茶苦茶重宝するんですわ。
さて、それをWordpress上でどう実現するか?
で、利用したのが、「Wordpress Custom Fields Search(WP Custom Search)」というプラグイン。
Wordpressのデータベースを元に、ドロップボックスやラジオボタンを作成していくれるスグレモノです。
同プラグインをインストール後、[設定]→[WP Custom Fields Search]へ行き、以下のような設定をします。
CompareをWords Inにしているところがポイント。
絞り込みのための比較方法(Compare)として、完全一致や部分一致などは予め用意されてるんですが、今回やりたいのは頭文字一致、つまり前方一致。
そこで小手先ではあるんですが、ちょっとプラグインのソースを変更します。
同プラグインのファイルwp-custom-fields-search/extra_search_fields.phpの662行あたりをちょっと変更します。
(変更前)
function getLikeString($field,$value){ return "$field LIKE '%$value%'"; }
(変更後)
function getLikeString($field,$value){ return "$field LIKE '$value%'"; }
ようはWHERE句となるであろうgetLikeStringの戻り値にある前の%を削除するだけ。
ホント、小手先。
前方一致の関数を独自に追加することも考えたんですが、もう歳なんでしょうか、人様が書いたソースを解析する気力がなくて…。
デフォルトでは、テンプレートに以下コードを追加させるだけで完成なんですが、このままだと、テキストボックスにいちいち頭文字を入れて絞り込まなくていけません。
先の設定画面で、WidgetをDropDownやRdioButtonも選べるんですが、データベースのレコードに基づいてフォームを作成するため、全タイトル分のフォームが作成されしまいます。
そこでテンプレートには以下のコードを追記。
コード中のcs-post_title-0やcs-title-0は、プラグインの設定で決まる値なので、前者はcs-Data Fieldの値-連番で、後者はcs-Labelの値-連番となっているようです。
extra_search_fields.phpへの先の変更で、部分一致の絞り込みができなくなってるんですが、どうしても部分一致もしたい、ってことであれば、上記テンプレートへのコードにあるフォールのValue値の頭に%を追記してやればOK。
動作の方は本ブログにある「ALFEE楽曲」ページ、「ALFEEリリース」ページをご覧下さい。