diff --git a/includes/class-wc-shipping.php b/includes/class-wc-shipping.php index 3b93e5027c6..29a72c9fe92 100644 --- a/includes/class-wc-shipping.php +++ b/includes/class-wc-shipping.php @@ -233,6 +233,24 @@ class WC_Shipping { 'orderby' => 'name', ) ); + // Update counts for variations -> parent products. + $counts = array(); + $term_ids = wp_list_pluck( $classes, 'term_id' ); + foreach ( $term_ids as $term_id ) { + $parent_products = array(); + $product_ids = get_objects_in_term( $term_id, 'product_shipping_class' ); + $products = array_map( 'wc_get_product', $product_ids ); + foreach ( $products as $product ) { + $id = $product->get_parent_id() ? $product->get_parent_id() : $product->get_id(); + $parent_products[ $id ] = true; + } + $counts[ $term_id ] = count( array_keys( $parent_products ) ); + } + + foreach ( $classes as $i => $class ) { + $classes[ $i ]->count = $counts[ $class->term_id ]; + } + $this->shipping_classes = ! is_wp_error( $classes ) ? $classes : array(); } return apply_filters( 'woocommerce_get_shipping_classes', $this->shipping_classes );