wordpress Woocommerce前端订单过滤器

3htmauhk  于 2022-12-26  发布在  WordPress
关注(0)|答案(1)|浏览(206)

我试图根据订单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”查询过滤器,并在搜索框中键入“处理中”等状态,它就可以工作。如果我使用“处理”或“拒绝”,它就不工作。如果我同时使用这两个搜索过滤器,搜索结果为空。这意味着,即使是post状态过滤器也不一致,其他过滤器根本不工作。

rfbsl7qr

rfbsl7qr1#

在深入研究WP查询类之后,我终于找到了解决方案。WP使用参数“p”在posts表中搜索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', 10, 2 );

相关问题