2017-12-06 17 views
0

私は次のpost_metaキーを持つ製品を選択するのに_product_new,_product_almost_newおよび_product_oldの商品を選択しています。post_metaでWooCommerce製品を選択して注文する方法

マイコード:私は

  1. product_new
  2. product_old
  3. product_almost_new

add_action('woocommerce_product_query', 'custom_vtp_shop_order'); 

function custom_vtp_shop_order($q){ 
    if (! $q->is_main_query()) return; 
    if (! is_admin() && (is_shop() || is_archive)) { 

     $q->set('tax_query', array(array(
      'taxonomy' => 'product_cat', 
      'field' => 'slug', 
      'terms' => array('Sold', 'Service'), 
      'operator' => 'NOT IN' 
     ))); 

     $q->set('meta_query', array(array(
      'relation' => 'OR', 
       'product_new' => array(
        'key' => '_product_new', 
        'value' => '1', 
       ), 
       'product_almost_new' => array(
        'key' => '_product_almost_new', 
        'value' => '1', 
       ), 
       'product_old' => array(
        'key' => '_product_old', 
        'value' => '1', 
       ) 
      ))); 

     /*THIS HAS NO EFFECT*/ 
     $q->set('orderby', array(array( 
       'product_new' => 'DESC', 
       'product_old' => 'DESC', 
       'product_almost_new' => 'DESC', 
      )   
     )); 

    } 

} 

私は製品は、次の順序で表示させたいです$ q-> seを使ってt( 'orderby'、array(......))、これは効果がありません。私の製品はいつもproduct_oldproduct_almost_newproduct_newと注文されています。

なぜ私の 'orderby'がうまくいかないのですか?どんな助けもありがとうございます。

答えて

0

あなたは1つのことを除いて大丈夫でした。配列内の配列を順序通りに使用していますが、これは正しくありません。書かれている補正用

$q->set('orderby', array(
       'product_new' => 'DESC', 
       'product_almost_new' => 'DESC', 
       'product_old' => 'DESC', 
      )   
     ); 
+0

おかげで、しかし「orderbyの」まだ与えられたコードの宵では効果 –

+0

を持っていない:ここで は、それがどのように見えるべきかは「product_new」=>「DESC」、 「product_old => 'DESC'、 'product_almost_new' => 'DESC'、 'product_old' => 'DESC'、 'product_almost_new' => 'DESC'、 'product_almost_new' => 'DESC' 'DESC'、 –

+0

_new、_old、_almost_newは必要な順序ですが、出力は常に_old、_almost_new、_newです。異なるキーの複数のmeta_valuesでソートすることは可能ですか? –

関連する問題