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

Commit 25cc1ef

Browse files
Merge pull request #126 from liquidweb/fix/custom-query-param-order
Ensure the orders query is adjusted as late as possible.
2 parents 3b76465 + 2c14360 commit 25cc1ef

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-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: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)