Merge pull request #21278 from woocommerce/fix/20989
Updated shipping class count and posts query to account for variations correctly.
This commit is contained in:
commit
f7028154a1
|
@ -39,6 +39,7 @@ class WC_Admin_List_Table_Products extends WC_Admin_List_Table {
|
||||||
add_filter( 'query_vars', array( $this, 'add_custom_query_var' ) );
|
add_filter( 'query_vars', array( $this, 'add_custom_query_var' ) );
|
||||||
add_filter( 'views_edit-product', array( $this, 'product_views' ) );
|
add_filter( 'views_edit-product', array( $this, 'product_views' ) );
|
||||||
add_filter( 'get_search_query', array( $this, 'search_label' ) );
|
add_filter( 'get_search_query', array( $this, 'search_label' ) );
|
||||||
|
add_filter( 'posts_clauses', array( $this, 'add_variation_parents_for_shipping_class' ), 10, 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -497,4 +498,26 @@ class WC_Admin_List_Table_Products extends WC_Admin_List_Table {
|
||||||
|
|
||||||
return wc_clean( wp_unslash( $_GET['s'] ) ); // WPCS: input var ok, sanitization ok.
|
return wc_clean( wp_unslash( $_GET['s'] ) ); // WPCS: input var ok, sanitization ok.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifies post query so that it includes parent products whose variations have particular shipping class assigned.
|
||||||
|
*
|
||||||
|
* @param array $pieces Array of SELECT statement pieces (from, where, etc).
|
||||||
|
* @param WP_Query $wp_query WP_Query instance.
|
||||||
|
* @return array Array of products, including parents of variations.
|
||||||
|
*/
|
||||||
|
public function add_variation_parents_for_shipping_class( $pieces, $wp_query ) {
|
||||||
|
global $wpdb;
|
||||||
|
if ( isset( $_GET['product_shipping_class'] ) && '0' !== $_GET['product_shipping_class'] ) { // WPCS: input var ok.
|
||||||
|
$replaced_where = str_replace( ".post_type = 'product'", ".post_type = 'product_variation'", $pieces['where'] );
|
||||||
|
$pieces['where'] .= " OR {$wpdb->posts}.ID in (
|
||||||
|
SELECT {$wpdb->posts}.post_parent FROM
|
||||||
|
wp_posts LEFT JOIN {$wpdb->term_relationships} ON ({$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id)
|
||||||
|
WHERE 1=1 $replaced_where
|
||||||
|
)";
|
||||||
|
return $pieces;
|
||||||
|
}
|
||||||
|
return $pieces;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -209,7 +209,6 @@ class WC_Shipping {
|
||||||
/**
|
/**
|
||||||
* Returns all registered shipping methods for usage.
|
* Returns all registered shipping methods for usage.
|
||||||
*
|
*
|
||||||
* @access public
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function get_shipping_methods() {
|
public function get_shipping_methods() {
|
||||||
|
@ -222,7 +221,6 @@ class WC_Shipping {
|
||||||
/**
|
/**
|
||||||
* Get an array of shipping classes.
|
* Get an array of shipping classes.
|
||||||
*
|
*
|
||||||
* @access public
|
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function get_shipping_classes() {
|
public function get_shipping_classes() {
|
||||||
|
|
Loading…
Reference in New Issue