WC_REST_Product_Variations_Controller::delete_unmatched_product_variations()
Deletes all unmatched variations (aka duplicates).
Method of the class: WC_REST_Product_Variations_Controller{}
No Hooks.
Return
Int
. Number of deleted variations.
Usage
// private - for code of main (parent) class only $result = $this->delete_unmatched_product_variations( $product );
- $product(WC_Product) (required)
- Variable product.
WC_REST_Product_Variations_Controller::delete_unmatched_product_variations() WC REST Product Variations Controller::delete unmatched product variations code WC 9.5.1
private function delete_unmatched_product_variations( $product ) { $deleted_count = 0; if ( ! $product ) { return $deleted_count; } $attributes = wc_list_pluck( array_filter( $product->get_attributes(), 'wc_attributes_array_filter_variation' ), 'get_slugs' ); // Get existing variations so we don't create duplicates. $existing_variations = array_map( 'wc_get_product', $product->get_children() ); $possible_attribute_combinations = array_reverse( wc_array_cartesian( $attributes ) ); foreach ( $existing_variations as $existing_variation ) { $matching_attribute_key = array_search( $existing_variation->get_attributes(), $possible_attribute_combinations ); // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict if ( false !== $matching_attribute_key ) { // We only want one possible variation for each possible attribute combination. unset( $possible_attribute_combinations[ $matching_attribute_key ] ); continue; } $existing_variation->delete( true ); $deleted_count ++; } return $deleted_count; }