此链接将为您的问题提供解决方案:https://stackoverflow.com/questions/47518280/create-programmatically-a-woocommerce-product-variation-with-new-attribute-value
上述解决方案基于以编程方式创建产品变体,这可能不安全,因此我建议使用WooCommerce提供的工具,创建现有和类似产品的副本,并根据需要进行更改。
从定义的变量product ID中,您将找到bellow,这是一个自定义函数,将添加(创建)产品变体。变量父产品需要为其设置所需的属性。
您需要提供以下信息:
属性/值数组Sku、价格和库存…。这些数据必须存储在格式化的多维数组中(见最后的示例)。
此函数将检查属性值(术语名称)是否已存在,如果不存在:-它将为产品属性创建它-在父变量product中设置它。
自定义函数代码:
/**
* Create a product variation for a defined variable product ID.
*
* @since 3.0.0
* @param int $product_id | Post ID of the product parent variable product.
* @param array $variation_data | The data to insert in the product.
*/
function create_product_variation( $product_id, $variation_data ){
// Get the Variable product object (parent)
$product = wc_get_product($product_id);
$variation_post = array(
\'post_title\' => $product->get_title(),
\'post_name\' => \'product-\'.$product_id.\'-variation\',
\'post_status\' => \'publish\',
\'post_parent\' => $product_id,
\'post_type\' => \'product_variation\',
\'guid\' => $product->get_permalink()
);
// Creating the product variation
$variation_id = wp_insert_post( $variation_post );
// Get an instance of the WC_Product_Variation object
$variation = new WC_Product_Variation( $variation_id );
// Iterating through the variations attributes
foreach ($variation_data[\'attributes\'] as $attribute => $term_name )
{
$taxonomy = \'pa_\'.$attribute; // The attribute taxonomy
// If taxonomy doesn\'t exists we create it (Thanks to Carl F. Corneil)
if( ! taxonomy_exists( $taxonomy ) ){
register_taxonomy(
$taxonomy,
\'product_variation\',
array(
\'hierarchical\' => false,
\'label\' => ucfirst( $attribute ),
\'query_var\' => true,
\'rewrite\' => array( \'slug\' => sanitize_title($attribute) ), // The base slug
),
);
}
// Check if the Term name exist and if not we create it.
if( ! term_exists( $term_name, $taxonomy ) )
wp_insert_term( $term_name, $taxonomy ); // Create the term
$term_slug = get_term_by(\'name\', $term_name, $taxonomy )->slug; // Get the term slug
// Get the post Terms names from the parent variable product.
$post_term_names = wp_get_post_terms( $product_id, $taxonomy, array(\'fields\' => \'names\') );
// Check if the post term exist and if not we set it in the parent variable product.
if( ! in_array( $term_name, $post_term_names ) )
wp_set_post_terms( $product_id, $term_name, $taxonomy, true );
// Set/save the attribute data in the product variation
update_post_meta( $variation_id, \'attribute_\'.$taxonomy, $term_slug );
}
## Set/save all other data
// SKU
if( ! empty( $variation_data[\'sku\'] ) )
$variation->set_sku( $variation_data[\'sku\'] );
// Prices
if( empty( $variation_data[\'sale_price\'] ) ){
$variation->set_price( $variation_data[\'regular_price\'] );
} else {
$variation->set_price( $variation_data[\'sale_price\'] );
$variation->set_sale_price( $variation_data[\'sale_price\'] );
}
$variation->set_regular_price( $variation_data[\'regular_price\'] );
// Stock
if( ! empty($variation_data[\'stock_qty\']) ){
$variation->set_stock_quantity( $variation_data[\'stock_qty\'] );
$variation->set_manage_stock(true);
$variation->set_stock_status(\'\');
} else {
$variation->set_manage_stock(false);
}
$variation->set_weight(\'\'); // weight (reseting)
$variation->save(); // Save the data
}
代码进入功能。活动子主题(或主题)的php文件或任何插件文件。