无法按元值

时间:2017-05-13 14:06:07

标签: wordpress woocommerce

我正在尝试使用woocommerce_my_account_my_orders_query过滤器在客户订单信息中心页面上过滤WC订单。按日期排序,标题等对我来说工作正常但是当我尝试按自定义元键和值过滤订单时,它不会返回正确的结果。

add_filter( 'woocommerce_my_account_my_orders_query', 'af_filter_orders', 10, 1 );

function af_filter_orders( $orders ) { 

    $orders = array(
     'limit'       => -1,
     'offset'      => null,
     'page'        => 1,
     'meta_key' => 'custom_meta_key', //meta type is plain string and i need results alphabetically.
     'orderby' => 'meta_value', //meta_value_num
     'order' => 'DESC', //ASC
     'customer' => get_current_user_id(),  
     'paginate' => true
    );
    return $orders;

} 

我在WC v2.6上。尚未测试3倍。我需要它与2.6一起工作

2 个答案:

答案 0 :(得分:1)

add_filter('woocommerce_my_account_my_orders_query', 'af_filter_orders', 10, 1);

function af_filter_orders($orders) {
    $orders = array(
        'limit' => -1,
        'offset' => null,
        'page' => 1,
        'meta_query' => array(
            'relation' => 'AND',
            array(
                'key' => 'custom_meta_key',
                'value' => $value,
                'compare' => 'LIKE'
            )
        ), //meta type is plain string and i need results alphabetically.
        'orderby' => 'meta_value', //meta_value_num
        'order' => 'DESC', //ASC
        'customer' => get_current_user_id(),
        'paginate' => true
    );
    return $orders;
}

答案 1 :(得分:0)

在WooCommerce 3.0以下,woocommerce_my_account_my_orders_query是用于get_post的args数组。

在此,我认为您的$orders数组应该包含meta_query,以使其正常工作。

$orders = array(
     'limit'       => -1,
     'offset'      => null,
     'page'        => 1,
     'meta_key' => 'custom_meta_key', //meta type is plain string and i need results alphabetically.
     'orderby' => 'meta_value', //meta_value_num
     'order' => 'DESC', //ASC
     'customer' => get_current_user_id(),  
     'paginate' => true,
     'meta_query' => array(
            array(
                'key'     => 'custom_meta_key', //meta type is plain string and i need results alphabetically.
                'value'   => array( 3, 4 ),
                'compare' => 'IN',
           ),
      ),
 );

在WooCommerce 3.0.x中,woocommerce_my_account_my_orders_query用于wc_get_orders,其中你的args仅限于给定的内容。 meta_keymeta_query是不可接受的。所以不会奏效。但是,最后会使用您可以使用的过滤器woocommerce_order_data_store_cpt_get_orders_query来处理查询。它基本上是在调用WP_Query。其中woocommerce_order_data_store_cpt_get_orders_query是args的过滤器。

<强> P.S。
我认为在3.1.x中,他们删除了wp_parse_args wc_get_orders。这意味着当您将其作为参数传递时,meta_keymeta_query将起作用。