web-dev-qa-db-ja.com

複雑なOrderbyパラメータ:meta_value_numを使用して複数のorderbyパラメータでクエリする方法

これはWP_Queryの私の現在のパラメータです:

array(5) {
  ["posts_per_page"]=>
  int(6)
  ["orderby"]=>
  array(2) {
    ["uss_product_price"]=>
    string(3) "ASC"
    ["uss_product_weight"]=>
    string(4) "DESC"
  }
  ["meta_query"]=>
  array(3) {
    ["relation"]=>
    string(3) "AND"
    ["sortprimary_clause"]=>
    array(2) {
      ["key"]=>
      string(17) "uss_product_price"
      ["compare"]=>
      string(6) "EXISTS"
    }
    ["sortsecondary_clause"]=>
    array(2) {
      ["key"]=>
      string(18) "uss_product_weight"
      ["compare"]=>
      string(6) "EXISTS"
    }
  }
  ["paged"]=>
  string(1) "1"
  ["post_type"]=>
  string(7) "product"
}

この新しい種類のorderbyは、WordPress 4.0および4.2で導入されました。 https://make.wordpress.org/core/2014/08/29/a-more-powerful-order-by-in-wordpress -4-0 /https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and- meta_query /

クエリは基本的には動作しますが、製品はuss_product_priceおよびuss_product_weightの文字列値によって順序付けられます。以前この問題はWP_Queryでmeta_valueの代わりにmeta_value_numを与えることで解決されました: https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

結果をuss_product_price(1番目)とuss_product_weight(2番目)の数値順に並べます。複数のorderbyパラメータを使用しながら、クエリに数値を使用するように指示するにはどうすればよいですか。

1
Blackbam

Boohooなぜ私はそのために賞金を始めたのですか;-)答えは非常に簡単です - メタクエリに 'type' => 'numeric'を追加します。

array(5) {
  ["posts_per_page"]=>
  int(6)
  ["orderby"]=>
  array(2) {
    ["uss_product_price"]=>
    string(4) "DESC"
    ["uss_product_weight"]=>
    string(4) "DESC"
  }
  ["meta_query"]=>
  array(3) {
    ["relation"]=>
    string(3) "AND"
    ["sortprimary_clause"]=>
    array(3) {
      ["key"]=>
      string(17) "uss_product_price"
      ["compare"]=>
      string(6) "EXISTS"
      ["type"]=>
      string(7) "numeric"
    }
    ["sortsecondary_clause"]=>
    array(2) {
      ["key"]=>
      string(18) "uss_product_weight"
      ["compare"]=>
      string(6) "EXISTS"
    }
  }
  ["paged"]=>
  string(1) "1"
  ["post_type"]=>
  string(7) "product"
}
2
Blackbam