n_data ) { $used_attributes_per_variation[ $variation_id ] = array(); foreach ( $variation_data as $variation_attribute_data ) { $attribute_name = $variation_attribute_data['attribute']; $used_attributes_per_variation[ $variation_id ][] = $attribute_name; $term_id = current( array_filter( ( $terms_used_per_attribute[ $attribute_name ] ?? array() ), fn( $item ) => $item['slug'] === $variation_attribute_data['slug'] ) )['term_id'] ?? null; if ( is_null( $term_id ) ) { continue; } $insert_data[] = array( $variation_id, $main_product_id, $attribute_name, $term_id, 1, $product_ids_with_stock_status[ $variation_id ] ?? false ); } } // * Insert data for variations that have "any..." attributes and at least one defined attribute foreach ( $used_attributes_per_variation as $variation_id => $attributes_list ) { $any_attributes = array_diff_key( $terms_used_per_attribute, array_flip( $attributes_list ) ); foreach ( $any_attributes as $attributes_data ) { foreach ( $attributes_data as $attribute_data ) { $insert_data[] = array( $variation_id, $main_product_id, $attribute_data['attribute'], $attribute_data['term_id'], 1, $product_ids_with_stock_status[ $variation_id ] ?? false ); } } } // * Insert data for variations that have all their attributes defined as "any..." $variations_with_all_any = array_keys( array_diff_key( array_flip( $variation_ids ), $used_attributes_per_variation ) ); foreach ( $variations_with_all_any as $variation_id ) { foreach ( $terms_used_per_attribute as $attribute_name => $attribute_terms ) { foreach ( $attribute_terms as $attribute_term ) { $insert_data[] = array( $variation_id, $main_product_id, $attribute_name, $attribute_term['term_id'], 1, $product_ids_with_stock_status[ $variation_id ] ?? false ); } } } // * We have all the data to insert, let's go and insert it. $insert_data_chunks = array_chunk( $insert_data, 100 ); foreach ( $insert_data_chunks as $insert_data_chunk ) { $sql = 'INSERT INTO ' . $this->lookup_table_name . ' ( product_id, product_or_parent_id, taxonomy, term_id, is_variation_attribute, in_stock) VALUES ('; $values_strings = array(); foreach ( $insert_data_chunk as $dataset ) { $attribute_name = esc_sql( $dataset[2] ); $values_strings[] = "{$dataset[0]},{$dataset[1]},'{$attribute_name}',{$dataset[3]},{$dataset[4]},{$dataset[5]}"; } $sql .= implode( '),(', $values_strings ) . ')'; // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared $result = $wpdb->query( $sql ); if ( false === $result ) { throw new \WC_Data_Exception( 0, 'INSERT statement failed', 0, array( 'db_error' => esc_html( $wpdb->last_error ), 'db_query' => esc_html( $wpdb->last_query ), ) ); } } } }