サポート » 使い方全般 » カスタムフィールドの値でソートした際の並び順

  • 解決済 Replicocko

    (@replicocko)


    カスタムフィールド「release」に商品の発売日を入れ、ソート表示出来るように以下のコードを書いています。

    <form name="change" method="get" id="sort_form5" class="sort_form5">
     <select name='sort' onChange="document.forms['change'].submit()" >
     <option value="sort1"<?php if(isset($_REQUEST['sort']) || $_REQUEST['sort'] == 'sort1') echo ' selected="selected"';?>>発売日が新しい順</option>
     <option value="sort2"<?php if(!isset($_REQUEST['sort']) && $_REQUEST['sort'] == 'sort2') echo ' selected="selected"';?>>発売日が古い順</option>
     </select>
    </form>
    
    <?php $sortset = $_GET['sort']; ?>
    <?php $sortall = array(
     "sort1" => 'order=DESC&orderby=meta_value&meta_key=release&posts_per_page=20&paged=',
     "sort2" => 'order=ASC&orderby=meta_value&meta_key=release&posts_per_page=20&paged='
    ); ?>
    
    <?php if($sortset != '') {
     $sort = $sortall[$sortset];
      } else {
     $sort = $sortall["sort1"];} ?>
    <?php query_posts($sort . $paged); ?>

    無事に表示はされるのですが、問題はここからです。
    商品が3つあり、それぞれのrelease値は以下の通りです。

    1. 2014年5月1日
    2. 2014年5月15日
    3. 2014年5月23日

    発売日の新しい順で並べたい時の理想の並び順は3、2、1の順ですが、実際に上記コードで表示された並び順は1、3、2の順になってしまいます。

    コードの書き方が悪いのでしょうか。解決案をご教授下さい。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター gatespace

    (@gatespace)

    コードと言うよりもカスタムフィールドの保存の仕方が悪いのかと。
    見た目は日付でも提示通りの値を保存しているのであれば「文字列」扱いでいわゆる50音順で並び替えが行われるからです。

    そーとしたいのであれば保存時にYYYYMMDDのような数字のみ保存するようにして
    出力時にPHPの関数を使って日付形式に変換する方が良いかも

    トピック投稿者 Replicocko

    (@replicocko)

    なるほど。値は掲示したままの文字列を入力していました。
    しっかりと日付表記をしなければならなかったのですね。

    助言を参考に、以下のように修正したら正しく表示されました。

    1. 2014年05月01日
    2. 2014年05月15日
    3. 2014年05月23日

    ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カスタムフィールドの値でソートした際の並び順」には新たに返信することはできません。