如何通过post_meta选择WooCommerce产品并订购它们

时间:2017-12-06 10:46:28

标签: php mysql wordpress woocommerce

我正在使用以下代码选择包含以下post_meta键的产品:_product_new_product_almost_new_product_old

我的代码:

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',
            )        
        ));

    }

}

我希望产品按以下顺序显示:

  1. product_new
  2. product_old
  3. product_almost_new
  4. 我正在使用$ q-> set('orderby',array(......)但这没有效果。我的产品总是被订购product_oldproduct_almost_newproduct_new

    为什么我的'orderby'无效?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

除了一件事,你做得很好。您已按顺序使用数组中的数组,这是不正确的。 这是它应该是什么样子:

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