@@ -38,3 +38,75 @@ function woocommerce_admin_meta_boxes_prepare_attribute_custom_tables_support( $
3838 return $ attribute ;
3939}
4040add_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