Skip to content

Commit dd0b49a

Browse files
committed
Modify queries
1 parent 1b0111d commit dd0b49a

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

includes/compatibility/hacks.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,75 @@ function woocommerce_admin_meta_boxes_prepare_attribute_custom_tables_support( $
3838
return $attribute;
3939
}
4040
add_filter( 'woocommerce_admin_meta_boxes_prepare_attribute', 'woocommerce_admin_meta_boxes_prepare_attribute_custom_tables_support', 10, 3 );
41+
42+
/**
43+
* Modify queries to use new table.
44+
*
45+
* @param array $query_vars WP Query vars.
46+
* @return array
47+
*/
48+
function woocommerce_modify_request_query_for_custom_tables( $query_vars ) {
49+
global $typenow, $wc_list_table;
50+
51+
if ( 'product' !== $typenow ) {
52+
return $query_vars;
53+
}
54+
55+
remove_filter( 'request', array( $wc_list_table, 'request_query' ) );
56+
57+
if ( ! empty( $query_vars['product_type'] ) ) {
58+
if ( 'downloadable' === $query_vars['product_type'] ) {
59+
$query_vars['wc_products']['downloadable'] = 1;
60+
} elseif ( 'virtual' === $query_vars['product_type'] ) {
61+
$query_vars['wc_products']['virtual'] = 1;
62+
} else {
63+
$query_vars['wc_products']['type'] = $query_vars['product_type'];
64+
}
65+
unset( $query_vars['product_type'] );
66+
}
67+
68+
if ( ! empty( $_REQUEST['stock_status'] ) ) { // WPCS: input var ok, CSRF ok.
69+
$query_vars['wc_products']['stock_status'] = wc_clean( wp_unslash( $_REQUEST['stock_status'] ) ); // WPCS: input var ok, CSRF ok.
70+
unset( $_GET['stock_status'] );
71+
}
72+
73+
return $query_vars;
74+
}
75+
76+
add_filter( 'request', 'woocommerce_modify_request_query_for_custom_tables', 5 );
77+
78+
/**
79+
* Handle filtering by type.
80+
*
81+
* @param array $args Query args.
82+
* @param WP_Query $query Query object.
83+
* @return array
84+
*/
85+
function woocommerce_product_custom_tables_custom_query_vars( $args, $query ) {
86+
global $wpdb;
87+
88+
if ( isset( $query->query_vars['wc_products'] ) ) {
89+
foreach ( $query->query_vars['wc_products'] as $key => $value ) {
90+
$key = esc_sql( sanitize_key( $key ) );
91+
$args['where'] .= $wpdb->prepare( " AND wc_products.{$key} = %s ", $value ); // WPCS: db call ok, unprepared sql ok.
92+
}
93+
}
94+
95+
return $args;
96+
}
97+
98+
add_filter( 'posts_clauses', 'woocommerce_product_custom_tables_custom_query_vars', 10, 2 );
99+
100+
/**
101+
* Join product and post tables.
102+
*
103+
* @param array $args Query args.
104+
* @return array
105+
*/
106+
function woocommerce_product_custom_tables_join_product_to_post( $args ) {
107+
global $wpdb;
108+
$args['join'] .= " LEFT JOIN {$wpdb->prefix}wc_products wc_products ON $wpdb->posts.ID = wc_products.product_id ";
109+
return $args;
110+
}
111+
112+
add_filter( 'posts_clauses', 'woocommerce_product_custom_tables_join_product_to_post' );

0 commit comments

Comments
 (0)