@@ -45,6 +45,60 @@ public function test_filter_database_queries() {
4545 ], WooCommerce_Custom_Orders_Table_Filters::filter_database_queries ( $ args , [] ) );
4646 }
4747
48+ public function test_filter_database_queries_with_postmeta () {
49+ $ args = [
50+ 'meta_query ' => [
51+ 'relation ' => 'AND ' ,
52+ 'customer_emails ' => [
53+ 'key ' => '_billing_email ' ,
54+ 'value ' => [
'[email protected] ' ],
55+ 'compare ' => 'IN ' ,
56+ ],
57+ 'custom_key ' => [
58+ 'key ' => '_custom_meta_key ' ,
59+ 'value ' => 'value ' ,
60+ ],
61+ ],
62+ ];
63+
64+ $ this ->assertEquals ( [
65+ 'meta_query ' => $ args ['meta_query ' ],
66+ '_wc_has_meta_columns ' => true ,
67+ 'wc_order_meta_query ' => [
68+ [
69+ 'key ' => 'billing_email ' ,
70+ 'value ' => [
'[email protected] ' ],
71+ 'compare ' => 'IN ' ,
72+ '_old_key ' => '_billing_email ' ,
73+ ],
74+ ],
75+ ], WooCommerce_Custom_Orders_Table_Filters::filter_database_queries ( $ args , [] ) );
76+ }
77+
78+ public function test_wc_get_orders_custom_meta_key () {
79+
80+ $ order = WC_Helper_Order::create_order ();
81+ $ order ->update_meta_data ( '_custom_meta_key ' , 'value ' );
82+ $ order ->save ();
83+
84+ // Because we hook into this filter, we need to ensure that if anyone else also hooks in, that we're
85+ // properly handling the resulting postmeta table JOIN clause in the resulting SQL query.
86+ add_filter ('woocommerce_order_data_store_cpt_get_orders_query ' , function ( $ query , $ query_vars ) {
87+ if ( ! empty ( $ query_vars ['_custom_meta_key ' ] ) ) {
88+ $ query ['meta_query ' ][] = array (
89+ 'key ' => '_custom_meta_key ' ,
90+ 'value ' => esc_attr ( $ query_vars ['_custom_meta_key ' ] ),
91+ );
92+ }
93+
94+ return $ query ;
95+ }, 100 , 2 );
96+
97+ $ orders = wc_get_orders ( array ( '_custom_meta_key ' => 'value ' ) );
98+
99+ $ this ->assertCount ( 1 , $ orders );
100+ }
101+
48102 public function test_filter_database_queries_without_meta_queries () {
49103 $ this ->assertEquals ( [
50104 'foo ' => 'bar ' ,
0 commit comments