2016-08-10 5 views
0

私はWP_Queryの結果を最初の日付と時刻の2つのメタフィールドでソートしようとしています。WP_Query orderby複数のパラメータが機能しない

"post_type" => "event", 
"post_status" => "publish", 
"posts_per_page" => 25, 
"ignore_sticky_posts" => 0, 
"show_sticky" => true, 
"meta_query" => array(
    array(
    "key" => "_meta_event_start_date", 
    "compare" => ">=", 
    "value" => 0 
    ), 
    array(
    "key" => "_meta_event_start_time", 
    "compare" => ">=", 
    "value" => 0 
    ), 
), 
"order" => "ASC", 
"orderby" => "_meta_event_start_date _meta_event_start_time" 

それは、現在の時間、日付によって適切に私の結果をソートするのではなく、(時刻形式:だから効果的

Date A 17:00 
Date B 18:00 
Date C 07:00 
Date B 10:00 
Date A 9:00 

Date A 9:00 
Date A 17:00 
Date B 10:00 
Date B 18:00 
Date C 07:00 

これは私の現在のコードで来ることになりますhh:mm(24hr)が格納されます)。この作業を行うためにクエリを修正するにはどうすればよいですか?

foreachループ、SQLクエリ、またはフィルタを使用して他の応答を推薦しました。私は残念なことに、私が作業しているサイトが検索プラグインファセットWPを使用し、検索にWP_Queryがデータベースと出力コンテンツを照会する必要があるため、これらを使用することはできません。

ありがとうございます。

+1

SQLを生成するので、 'orderby'値のフィールド間にコンマが必要な場合があります。 '' orderby "=>" _meta_event_start_date、_meta_event_start_time "'は動作しますか? – Hobo

+0

残念ながら、それはうまくいきませんでした。ただ検索のデフォルトを戻しました – James

答えて

0

私はあなたがメタキーで注文しようとしている見ての通り - 以下のようなもの - あなたはWordPress 4.2の変化に応じて、この場合には非常に多くの複雑な構文を使用する必要があります。

"post_type" => "event", 
"post_status" => "publish", 
"posts_per_page" => 25, 
"ignore_sticky_posts" => 0, 
"show_sticky" => true, 
"meta_query" => array(
    "event_start_date" => array(
     "key" => "_meta_event_start_date", 
     "compare" => ">=", 
     "value" => 0 
    ), 
    "event_start_time" => array(
     "key" => "_meta_event_start_time", 
     "compare" => ">=", 
     "value" => 0 
    ) 
), 
"orderby" => array(
    "event_start_date" => "ASC", 
    "event_start_time" => "ASC" 
) 

さらに - シングルmeta_keyのためにあなたがorderby句の値で使用する必要があることを覚えておくことは覚えておく価値があります。meta_value and meta_value_num

+0

それはうまくいきました。本当にありがとう!! – James

関連する問題