+RECOMMEND
+RECOMMEND
+Ad
+OTHERS

無料ブログ作成サービス JUGEM

paperboy&co.
RSS 1.0
ATOM  0.3
<< February 2018 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 >>
<< 【fVisiOn】テーブルから飛び出す初音ミク3D映像【3D映像】 | main | youtubeで使える便利な裏技まとめ >>
【五十音順】wordpressであいうえお順ソートに関する覚書【ソート】


Wordpressで記事一覧を「あいうえお順」でソートしようとしたときにはまったので
覚書エントリーです。


まず、「あいうえお順(日本語)」でソートする場合の問題として、「漢字」や「カタカナ」「ひらがな」といった日本語特有の言語問題が挙げられます。
なにぶん複雑な言語なので、すべてをひっくるめてソートすることは至難の業です。
なので、「ひらがな」もしくは「カタカナ」に絞ったほうがいい結果が得られると思います。

漢字なんていうのは、読み方も複数あり、同音異義語も多数存在するので大変です。そのうえ、種類も数万字。日本語フォントがやけに割高なのもうなずけます。

試行錯誤
始めに行った方法として、タイトルからソートする方法でした。これだと、
<?php query_posts("&orderby=title&order=ASC"); ?>
<?php while ( have_posts() ) : the_post(); ?>
こんな感じの記述でアルファベット順はOKでした。あいうえお順でも問題ないはずなんですが、ここでひとつ問題が。タイトルが漢字で始まる場合があった。
これで、結果が大きく変わりました。上記の通り漢字は複雑なので、ソートの際いい結果が得られません。そこで解決策を考えました。

1.ひらがなでタイトルを記述
2.日付・IDなどでむりやり合わせる
3.他の要素でソートさせる

結論から言えば「3.他の要素でソートさせる」でなんとか対応。
順に解説していきます。


1.ひらがなでタイトルを記述

コレに関してはこちらのサイトが参考になりました。

■CSレキシコンのアーカイブページであいうえお順に表示させるPHP

CSレキシコンさんのサイトでは、試行錯誤のソースで実現。こちらのサイトでは辞書形式で記事を並べるという使い方だったので、ばっちりうまくいっています。

実例
■CSレキシコン(コンサドーレ札幌用語集)
CONSA DE CONSAの勝手気ままなコンサドーレ用語集
http://www.consadeconsa.com/glossary/category/line-a/


始めに「ひらがな」で記述し、漢字での表記が必要な場合は、そのあとにつづけて漢字を表記というやり方です。データベース的な利用だとこのやりかたでOKだと思いました。



2.日付・IDなどでむりやり合わせる

これだと確実ですが記事が多くなってきた場合の管理がめんどくさいので却下。



3.他の要素でソートさせる

本当は「1.ひらがなでタイトルを記述」でスマートに行きたかったんですが、サイトの性質上そうも行かず。そこで考えたのが他の要素にひらがなを記述して、その要素順でソートするというもの。

ソート要素として
・スラッグ
・タグ
・カテゴリー
想定。

タグと、カテゴリーだといろいろめんどくさそうなのでスラッグで行くことに。
スラッグでソートする場合のパラメーターは"name"です。ので、ソースはこんな感じになります。
<?php query_posts("&orderby=name&order=ASC"); ?>
<?php while ( have_posts() ) : the_post(); ?>
赤太字の部分を書き換えました。これで、スラッグにひらがなを記述してうまくいくと思いきやまた難問が。なぜか"name"がうまく動作してくれません。

調べていくと一つの原因を発見。

wp-includesフォルダにあるquery.phpにソート関係の記述があるんですが、そこの配列になぜか"name"が無い・・・。


ほんとかどうか確かめてみると確かにない。該当箇所は2274行目あたりのこの部分
// Order by
        if ( empty($q['orderby']) ) {
            $q['orderby'] = "$wpdb->posts.post_date " . $q['order'];
        } elseif ( 'none' == $q['orderby'] ) {
            $q['orderby'] = '';
        } else {
            // Used to filter values
            $allowed_keys = array('author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count','name');/*←ここにnameを追加しました。*/
            if ( !empty($q['meta_key']) ) {
                $allowed_keys[] = $q['meta_key'];
                $allowed_keys[] = 'meta_value';
                $allowed_keys[] = 'meta_value_num';
            }
            $q['orderby'] = urldecode($q['orderby']);
            $q['orderby'] = addslashes_gpc($q['orderby']);
            $orderby_array = explode(' ', $q['orderby']);
            $q['orderby'] = '';


ちなみにwordpressのバージョンは3.1です。この問題はバージョン2.8ぐらいからあったみたいです。"name"でのソートがうまくいかないという方は、この方法を試してみるといいかもしれません。バージョンによって記述箇所が微妙に違うので、それぞれのバージョンで確かめてみてください。
wpの核になる部分をいじるので、心配な方はバックアップ推奨です。

ということで「3.他の要素でソートさせる」でスラッグからソートすることで一応の解決に至りました。ただ、スラッグを別の用途に利用していたり、URL表記など諸々の理由でそれすら難しい場合は他の方法を模索するしかないようです。冒頭にも書きましたが、日本語ソートそのものが厄介なので、可能であれば他の手段を用いるほうが時間と手間が省けると思います。サイトの目的にあった方法を利用しましょう。

| WordPress/MT | 07:40 | comments(0) | trackbacks(0) | - | - |はてなブックマーク - 【五十音順】wordpressであいうえお順ソートに関する覚書【ソート】 | このエントリーをはてなブックマークに追加









http://blog.tug.lomo.jp/trackback/990277