とある不動産関係のウェブサイトを作ったとき、施行実績を投稿で登録し、施工業者や工事データなどをカスタムフィールドテンプレートを用いて表で表示させるようにした。
初回登録時には問題がなかったが、納品後、実際にお客様が登録したところ、順番がばらばらになるとクレームをいただいた。
どうやらテンプレートに並んでいる順番ではなく文字を入れた順番により登録順が決まり、内部で特に順序に関する情報を持たないことが後からわかった。
さすがに修正の度に上から入れ直してくださいとはいえないのでいろいろさがしてみた。
1.自動取得せず一つずつ呼び出す
項目が1セットしかなければ決めうちが出来るのだが、
セットはカテゴリ毎に複数有り、functionに設置した、get_post_custom_keysで読み出してforeachで回しながら表示する共通の関数を使うようにしてしまったため、この方法は今後のことを考えても使いたくない。
2.頭に数字をつける
フィールド名を数字から始めれば順番に並ぶとの記事があったので試してみた。
…バージョンによる違いなのかはわからないが、全く効果がなかった。。。
3.配列に入れてソート
あまりきれいではないが、とりあえず2のように数字を頭に入れて保存した表題をまず配列に読み出して、配列ソートをかけ、さらにループで表示。冒頭数字部分はmb_substrではじく。
これで一応順番を固定できたが、問題がいくつか。
・すでにレコードを登録済みの場合は全てフィールド名をつけ直さなければならない。
・順番の変更があった場合、フィールドメイ全て変更しなければならない。
プラグインで順番を制御できればいいのだが、今のところ見つかっていない。
また、phpは初心者レベルなので、もっときれいな方法があるのかもしれない。