2017-10-20 10 views
0

私は今解決して問題を適切に解決する方法を見つけようとしています。Wordpressでメタ値を並べ替え

私は私がちょうど良い年のメタフィールドでそれを並べ替えることができますソートする必要がある大学の講義シリーズを持っています。しかし、学期ごとにソートするとアルファベット順にソートされるので、冬、春、秋、秋、春、冬の順番に並べ替えることになります。

私は、ソートの優先順位のためのポスト明らかに少し厄介である次のように現在書か

クエリー引数に別のフィールドを追加することなく、好ましくは、正しい順序で順番にこれを行う方法を把握する必要があります。

$args = array(
       'post_type' => 'mcm_geri-ed', 
       'posts_per_page' => $posts_per_page, 

       'meta_query' => array(
        'semester' => array(
         'key' => 'semester', 

       ), 
        'year' => array(
         'key' => 'year' 
       ) 
      ), 
       'orderby' => array(

        'year' => 'DESC', 
        'semester' => array(
        'value' => 'date' 
       ) 
      ), 
       'paged' => $paged 
      ); 

答えて

1

私はWP_Queryでこれを直接行う方法はないと思います。 posts_orderbyを使用し、SQLのORDER部分をmeta_year DESC, meta_semester = 'Spring' DESC, meta_semester = 'Fall' DESCのように操作するのはどうですか?生成されたSQLを見て、meta_yearとmeta_semester(またはトリムター、本当に)に使用する名前を確認してください。

これは数値に学期を変更して出力しながら名前を追加するほど効果的ではないが、それは動作します。

+0

私はこれもお勧めします - またはすべてを選択し、あまりにも多くない場合は手動でソートを行います。 WP_Queryを使用しても可能です。 – Mikk3lRo

+1

私は原則について同意しますが、好ましくは 'FIND_IN_SET(meta_semester、 'Fall、Spring、Winter')ASCを使用します。 FIND_IN_SETは、コンマで区切られた2番目の文字列の最初の引数の位置を返します。そのため、必要な順番でリストされる必要があります。 – CBroe

+1

私はWP_Queryで試して1時間後に可能であるというコメントを取りました。あなたは[能力を加える]ことができます(https://gist.github.com/mikeschinkel/6402058)。 janhが提案したように 'posts_orderby'フックを使うのはかなり簡単です。 – Mikk3lRo

0

これは私が最終的にしたものです。それは示唆されたものとは何か違っていたが、結果を得るために提案されたフィルターを使用していた。 if文には、ページテンプレートのソートシステムを構築した方法のために、いくつかの注意点が追加されています。私はまた、テスト環境でこれを書いて、元のコードとは異なる投稿タイプを書きました。

関連する問題