[WP 3.6.1] カスタムフィールドの都道府県名によってソート

以前、カスタムフィールドで記事の並び順を定義 という記事を書いたのですが、
カスタムフィールドに都道府県名を文字列で登録した場合に、
地図上の北の県から順番に並べるにはどうすればいいのかという質問を受けました。

都道府県名であいうえお順で並べるのはそう難しくないのですが、
地図上の北の県から順番となると、県番号などを用いて順番を定義した方が良さそうです。
というわけで、やってみました。

まず前提条件として、各投稿には以下のようなカスタムフィールドを定義することとします。
・カスタムフィールド名: 都道府県
・カスタムフィールドの値: 北海道、青森県、秋田県 … という感じで、”都”"道”"府”"県”も含む文字列

次に記事内容を出力するループの直前などに、以下のようなコードを記述します。

<?php
    // 県番号と県名を配列で定義
    $arrPref = array(
        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  =>  '兵庫県',
        29  =>  '奈良県',
        30  =>  '和歌山県',
        31  =>  '鳥取県',
        32  =>  '島根県',
        33  =>  '岡山県',
        34  =>  '広島県',
        35  =>  '山口県',
        36  =>  '徳島県',
        37  =>  '香川県',
        38  =>  '愛媛県',
        39  =>  '高知県',
        40  =>  '福岡県',
        41  =>  '佐賀県',
        42  =>  '長崎県',
        43  =>  '熊本県',
        44  =>  '大分県',
        45  =>  '宮崎県',
        46  =>  '鹿児島県',
        47  =>  '沖縄県'
    );

    // $posts に pref_id を挿入
    foreach($posts as $key => $val){
        foreach($arrPref as $pref_id => $pref_name){
            if(get_post_meta($val->ID, "都道府県", true) == $pref_name){
                $posts[$key]->pref_id = $pref_id;
            }
        }
    }

    // pref_id の値によって、$posts を昇順に並び替え
    foreach($posts as $key => $val){
        $sort[$key] = $val->pref_id;
    }
    array_multisort($sort, SORT_ASC, $posts);
?>

    <?php /* The loop */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

このようにすれば、ループで記事内容を出力する前に、県番号で並べ替えが行われます。
あまりスマートなやり方ではないですが、ご参考ください。

カテゴリー: 未分類   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

* Copy This Password *

* Type Or Paste Password Here *

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>