[HTML5]datalist要素の基本的な使い方・応用(WordPressで全タグを検索の入力候補にしたりする)
この記事は約12分ぐらいで読めます
datalist
というタグがあります。その基本的な使い方と、WordPressで自動的に全てのタグを拾う方法などを紹介します。datalist要素とは
HTML5で新しく加わったdatalist
要素は、list
属性で紐付けられたinput
要素にユーザーが入力する際に、datalist
要素内に置かれたoption
要素の値をその入力候補として表示させる為の要素です。
datalist
タグ内に入力候補としたいワードをvalue
属性に持つoption
タグを複数記述します。
つまりdatalist
要素とは、input
要素にサジェストを追加出来る要素だということです。
datalist 要素 – フォーム – HTML要素 – HTML5 タグリファレンス – HTML5.JP
datalist
タグが使えるinput
要素のタイプはtext
だけではなく、様々なものに使えます。
変わったものはそもそもまだ対応していないブラウザーも多いのですが、color
なんかは結構使い方が色々思いついて面白いですね。
datalist要素(入力候補一覧) – HTML 5 リファレンス
datalist要素のブラウザー対応状況
datalist
要素は現在Firefox、Google Chrome、Opera、Internet Explorer 10が対応しています。Safariが対応していないとは意外。
対応していないブラウザーはdatalist
要素内のoption
要素も含め表示しません。大した量でないのであれば記述しておいて損なことはないでしょう。
datalist
要素のコンテンツ・モデルはoption
要素またはフレージング・コンテンツであり、option
タグ以外の内容を記述する事も出来ます。その場合、そのフレージング・コンテンツはdatalist
要素に対応しているブラウザーでは表示されず、非対応ブラウザーでのみ表示されます。つまり、代替コンテンツの様に、注意書きとして使うような形になります。
datalist要素の使いどころ
最初から入力する要素が完全に決まっている場合は別に文字入力をさせる必要はないわけですし、その場合はselect
要素を使いますよね。
つまりdatalist
要素は自由入力を認めつつ、頻繁に入力されるであろうことがわかっているワードが想定される場合に使われることになるでしょう。具体的には時刻、駅や国名等を入力する場合でしょうか。ECサイト等で、流行っているモノや売り出し中のものをレコメンドする目的にも使えるような気がします。
動的に扱うなら、SNS等で友人を検索する場合に、既に友人になっている人の名前を生成しておくといった使い方もできそうですね★
WordPressの検索窓をdatalistでカスタマイズする
WEBCRE8.jpはWordPressで作られたブログです。これでまず、検索窓を編集して入力候補を作れるようにしてみましょう。
searchformテンプレート
WordPressのテンプレートにはsearchform.php
というものがあります。これはWordPressのウィジェット、検索を設置した場合や、get_search_form
関数を使うと自動的に呼び出されるものです。仮にこのテンプレートを設置していない場合はデフォルトの検索フォームが呼び出されます。
これを自分で編集した検索フォームにしたい場合にはこのテンプレートを使用する事になります。
テンプレートファイルを増やしたくない人はfunctions.php
に記述することもできるようなので、その辺更に詳しく知りたい人は以下を参照してみてください。
関数リファレンス/get search form – WordPress Codex 日本語版
searchformテンプレートをカスタマイズする
では次にこのsearchform.php
を編集してみます。datalist
タグを設置し、そのdatalist
タグと紐付かせるlist
属性を検索フォームのinput
タグに付けなければいけません。
このように、list
にsearchtag
を指定する事で、後のdatalist
要素を検索窓に結び付けます。
これでちょっと便利に…少なくとも選ばせたいワードを指定できるようにはなりますね★
PHPを使ってブログのタグを自動的に値として取得する
さて前述のように簡単に検索候補を指定できるdatalist
要素ですが、やはり一つ一つこれを用意するのはめんどくさいですよね。自動的にこれを用意できるならその方が便利です。
考えたのが、WordPressで記事を検索させるとき、予めサイトに設置されている記事のタグが選択できるようにしてはどうかという事です。
私はPHPに関してはさっぱりなので、以下の記事を参考にして作ってみました。
foreachの勉強がてら、ブログ内に存在するすべてのタグを取得し1件ずつ表示させるループを書いた[WordPress] | マイペースクリエイターの覚え書き
要はタグの名前をoption
タグの値として取得し、全ての投稿タグをその形でループさせれば出来るわけですよね。
こうする事で、基本的にサイトで提供できる情報についてはここである程度示すことが出来ようになるわけです。便利ですねー!実際に今WEBCRE8.jpのサイドバーの検索フォームにこの機能を実装しています。対応ブラウザーで試してみてくださいー★
同じように記事のタイトルを入力候補にすることもできると思うのですが、そっちはタグと違って膨大な量になるような気もするのでどうなんでしょうね。いずれにせよHTMLが膨大になり過ぎるような使い方は微妙かなとも思っています。
終わりに
残念ながらSafariとIE9以下は対応していないという事でしたね。こうした機能を使うときの注意点は、「これがなければ使えない」というような状況を作らないようにすることです。入力補助はあくまで補助なので、なくても検索は出来ます。でも、さすがにこれだけをサービスの根幹部分の選択に使う事はできませんよね。
便利な機能なのでワンポイントで使っていきたいですね★