问题描述
我正在尝试根据订单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”,则无法使用。如果同时使用两个搜索过滤器,则搜索结果为空。这意味着,即使帖子状态过滤器也不一致,其他过滤器也根本不起作用。
解决方法
深入研究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 );