- 投稿: 2011年09月15日 19:41
- 更新: 2011年09月18日 11:24
- ソフトウェア
WordPressのエントリを「あいうえお」順にソートしたかったのです.一般的に考えて,こんな方法で取り出します.
query_posts('showposts=-1&orderby=title&order=asc');
あると思います.しかし,これには日本語特有の問題があります.アルファベットやひらがなやカタカナはまぁまぁそこそこ思い通りに出力されると思いますが,漢字が入ると途端にダメです.当たり前ですね.「海」を「うみ」と読むのか「かい」と読むのかは字面からでは判断できません.そのため,日本語で書かれたエントリタイトルを単純な方法でソートしても,期待通りの結果を得ることはできません.
では,どうしますか?以下のような解決方法が考えられます.
- タイトルに漢字を使わない
- タイトル以外の要素を利用してソートする
タイトルに漢字を使わないというのは,なかなか強行的で,利便性への配慮が欠けすぎています.非現実的なソリューションです.非実在解決法.では,タイトル以外の要素を利用してソートすることを考えたとき,どのような手法があり得るのでしょうか.
- スラッグ
- カテゴリ
- タグ
- カスタムフィールド
まずスラッグです.スラッグは以下のように説明されています.
スラッグとは、投稿や固定ページを表すいくつかの単語のこと。スラッグは(WordPress によって自動生成された)URL に適する形式の投稿タイトルであることが多いが、その他の好きなフレーズでもかまわない。URL にあるコンテンツを説明する支援として、スラッグはパーマリンクで使われる。
好きなフレーズでも構わないので,ひらがなかカタカナでエントリの読みを振っておけば,ソートに利用できそうです.なかなかいいですね.
ではカテゴリはどうでしょうか.カテゴリでは問題は解決しません.エントリの数だけカテゴリを作るというなら,読みをカテゴリ名に与えて解決することもできますが,本来の利用方法から逸脱しすぎです.しかしながら,これはこれで別に役に立つ使い方があります.これは後述します.
タグを使う場合はどうでしょうか.タグに読みを与えれば解決できます.しかし,カテゴリと同じく,エントリの数だけタグが生成され,実に美しくないです.本来の用途でタグを使おうとしたときに,邪魔であるという問題もあります.ですので,積極的に採用したい解決策ではありません.
最後に,カスタムフィールドはどうでしょう.カスタムフィールドの使い方として,以下のような例示があります.
WordPress には、投稿者が投稿に「カスタムフィールド」を追加できる機能があります。この任意の情報は「メタデータ」と呼ばれており、たとえば以下のような情報を含めることができます。
- 現在のムード: 幸せいっぱい
- 今読んでいる本: 星の王子様
- BGM: Rock Around the Clock
- 今日の天気: 晴れ
さらに、ちょっとしたコードを付け加えるだけで、このメタデータに投稿の表示期限を付け加えたりすることも可能です。
これは今回の目的にぴったりです.ではカスタムフィールドを使って実装しましょう.
カスタムフィールドを用いたエントリ50音ソート
まず前提として,以下を想定します.
- カスタムフィールド名”yomi”に値として「ふりがな」を入力する
- カスタムフィールド”yomi”を利用してエントリを50音ソートする
- エントリタイトルは通常通りに英数漢字かなカナ混合
- Exec-PHPなどが導入されていて,エントリやページにPHPを書ける状態である
では,以上のような想定環境下で全エントリを50音ソートさせてみます.以下のようなコードを「エントリ一覧」などとしたページに書くと,なんとなくそれっぽい出力が得られると思います.
query_posts('showposts=-1&orderby=meta_value&meta_key=yomi&order=asc'); while (have_posts()) : the_post(); echo '<p><a href="'; the_permalink(); echo '">'; the_title(); echo '</a></p>'; endwhile;
簡単ですね.
カスタムフィールドの入力を必須項目にしたい
ここからはおまけです.カスタムフィールドを使ってソートを実現しましたが,カスタムフィールド”yomi”に値が入力されていなければ,正しくソートされません.となれば,この項目は入力必須に指定したくなります.それを可能にするプラグインがCustom Field GUI Utility 3です.conf.iniを以下のように設定すれば,カスタムフィールド”yomi”は入力必須項目になります.
[yomi] fieldname = ひらがなでの読み type = textfield class = post default = あいうえお size = 35 must = 1
もっといえば,ちゃんと「ふりがな」が入力されているかのバリデーションもやりたいところですね.そのときは,functions.phpでedit_postにフックを引っかけて,バリデーションしたら良いと思います.やってないので,コードは紹介できませんが.
201109181121追記
後述しますって書いておいて,カテゴリの使用方法を後述してませんでしたので,追記します.
50音順ソートはカスタムフィールドでやるとして,「あ行」とか「か行」とか,もっと細かく「あ」とか「い」とかやるには,カテゴリを打つのが便利です.カテゴリ毎のエントリをカスタムフィールドで並べれば良いだけなので.カスタムフィールド単体でやると,出力時に「あ」なのか「い」なのかを判別する処理を加える必要があります.それでも良いと思うけど.
参考
- Newer: 新しくなった放送大学東京文京学習センターを見てきた
- Older: ハートプラス,はじめました