Woocommerce前端订单过滤器

问题描述

我正在尝试根据订单ID,状态和产品名称过滤客户的前端订单。

添加一个带有搜索框的表单,添加查询变量过滤器,如下所示。

    //Add my account order search keyword query var

function efst_query_vars( $qvars ) {
    $qvars[] = 'keyword';
    return $qvars;
}
add_filter( 'query_vars','efst_query_vars' );

// define the woocommerce_my_account_my_orders_query callback 
function efst_filter_woocommerce_my_account_my_orders_query( $array ) { 
    $keyword = get_query_var('keyword');

    $array['post_parent'] =  $keyword;
    $array['post_status'] =  $keyword;

    return $array; 
}; 
         
// add the filter 
add_filter( 'woocommerce_my_account_my_orders_query','efst_filter_woocommerce_my_account_my_orders_query',10,1 ); 

如果我仅使用“ post_status”查询过滤器,并在搜索框中输入类似“处理中”的状态,则它可以正常工作。如果我使用“过程”或“ refu”,则无法使用。如果同时使用两个搜索过滤器,则搜索结果为空。这意味着,即使帖子状态过滤器也不一致,其他过滤器也根本不起作用。

enter image description here

解决方法

深入研究WP Query类之后,我终于找到了解决方案。 WP使用参数“ p”在职位表中搜索ID。

工作代码如下:

// define the woocommerce_my_account_my_orders_query callback 
function efst_filter_woocommerce_my_account_my_orders_query( $array ) { 
    $keyword = get_query_var('keyword');
    $array['ID'] =  $keyword;
    return $array; 
}; 
         
// add the filter 
add_filter( 'woocommerce_my_account_my_orders_query','efst_filter_woocommerce_my_account_my_orders_query',10,1 ); 


/**
 * Handle a custom 'ID' query var to get orders with the 'ID' meta.
 * @param array $query - Args for WP_Query.
 * @param array $query_vars - Query vars from WC_Order_Query.
 * @return array modified $query
 */
function handle_custom_query_var( $query,$query_vars ) {
    
    if ( ! empty( $query_vars['ID'] ) ) {
        $query['p'] = $query_vars['ID'];
    }

    return $query;
}
add_filter( 'woocommerce_order_data_store_cpt_get_orders_query','handle_custom_query_var',2 );