WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Получай пассивный доход от сайта с помощью браузерных PUSH уведомлений
функция не описана

WC_Product_Data_Store_CPT::create_all_product_variations() public WC 3.6.0

Creates all possible combinations of variations from the attributes, without creating duplicates.

{} Это метод класса: WC_Product_Data_Store_CPT{}

Хуки из метода
Возвращает

Число. Number of created variations.

Использование

$WC_Product_Data_Store_CPT = new WC_Product_Data_Store_CPT();
$WC_Product_Data_Store_CPT->create_all_product_variations( $product, $limit );
$product(WC_Product) (обязательный)
Variable product.
$limit(число)
Limit the number of created variations.

Список изменений

С версии 3.6.0 Введена.

Код WC_Product_Data_Store_CPT::create_all_product_variations() WC 5.3.0

<?php
public function create_all_product_variations( $product, $limit = -1 ) {
	$count = 0;

	if ( ! $product ) {
		return $count;
	}

	$attributes = wc_list_pluck( array_filter( $product->get_attributes(), 'wc_attributes_array_filter_variation' ), 'get_slugs' );

	if ( empty( $attributes ) ) {
		return $count;
	}

	// Get existing variations so we don't create duplicates.
	$existing_variations = array_map( 'wc_get_product', $product->get_children() );
	$existing_attributes = array();

	foreach ( $existing_variations as $existing_variation ) {
		$existing_attributes[] = $existing_variation->get_attributes();
	}

	$possible_attributes = array_reverse( wc_array_cartesian( $attributes ) );

	foreach ( $possible_attributes as $possible_attribute ) {
		// Allow any order if key/values -- do not use strict mode.
		if ( in_array( $possible_attribute, $existing_attributes ) ) { // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
			continue;
		}
		$variation = wc_get_product_object( 'variation' );
		$variation->set_parent_id( $product->get_id() );
		$variation->set_attributes( $possible_attribute );
		$variation_id = $variation->save();

		do_action( 'product_variation_linked', $variation_id );

		$count ++;

		if ( $limit > 0 && $count >= $limit ) {
			break;
		}
	}

	return $count;
}