WC_REST_Product_Variations_Controller::delete_unmatched_product_variations
Deletes all unmatched variations (aka duplicates).
Метод класса: WC_REST_Product_Variations_Controller{}
Хуков нет.
Возвращает
int. Number of deleted variations.
Использование
// private - только в коде основоного (родительского) класса $result = $this->delete_unmatched_product_variations( $product );
- $product(WC_Product) (обязательный)
- Variable product.
Код WC_REST_Product_Variations_Controller::delete_unmatched_product_variations() WC REST Product Variations Controller::delete unmatched product variations WC 10.4.0
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;
}