Skip to content
This repository was archived by the owner on Jun 15, 2022. It is now read-only.

Commit faf89b2

Browse files
committed
Ensure the orders query is adjusted as late as possible.
1 parent 587ce29 commit faf89b2

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

includes/class-wc-order-data-store-custom-table.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class WC_Order_Data_Store_Custom_Table extends WC_Order_Data_Store_CPT {
2020
public function __construct() {
2121

2222
// When creating a WooCommerce order data store request, filter the MySQL query.
23-
add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', 'WooCommerce_Custom_Orders_Table_Filters::filter_database_queries', 10, 2 );
23+
add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', 'WooCommerce_Custom_Orders_Table_Filters::filter_database_queries', PHP_INT_MAX, 2 );
2424
}
2525

2626
/**

tests/test-filters.php

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,70 @@ 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+
'meta_query' => [
76+
'relation' => 'AND',
77+
'customer_emails' => [
78+
'key' => '_billing_email',
79+
'value' => [ '[email protected]' ],
80+
'compare' => 'IN',
81+
],
82+
'custom_key' => [
83+
'key' => '_custom_meta_key',
84+
'value' => 'value',
85+
],
86+
],
87+
], WooCommerce_Custom_Orders_Table_Filters::filter_database_queries( $args, [] ) );
88+
}
89+
90+
public function test_wc_get_orders_custom_meta_key() {
91+
92+
$order = WC_Helper_Order::create_order();
93+
$order->update_meta_data( '_custom_meta_key', 'value' );
94+
$order->save();
95+
96+
add_filter('woocommerce_order_data_store_cpt_get_orders_query', function ( $query, $query_vars ) {
97+
if ( ! empty( $query_vars['_custom_meta_key'] ) ) {
98+
$query['meta_query'][] = array(
99+
'key' => '_custom_meta_key',
100+
'value' => esc_attr( $query_vars['_custom_meta_key'] ),
101+
);
102+
}
103+
104+
return $query;
105+
}, 100, 2);
106+
107+
$orders = wc_get_orders( array( '_custom_meta_key' => 'value' ) );
108+
109+
$this->assertEquals( 1, count($orders) );
110+
}
111+
48112
public function test_filter_database_queries_without_meta_queries() {
49113
$this->assertEquals( [
50114
'foo' => 'bar',

0 commit comments

Comments
 (0)