wordpress 产品变化具有“任何”变化的设置

4c8rllxm  于 12个月前  发布在  WordPress
关注(0)|答案(1)|浏览(243)

我正在使用下面的代码以编程方式创建一个可变产品,但创建的产品具有“任何徽章ID”的变体。例如,我想要一个徽章ID为1000的产品变体,并设置价格和数量。

/* Set the product attribute */
$attribute = new WC_Product_Attribute();
$attribute->set_name( 'Badge ID' );
$attribute->set_options( array( '1000' ) );
$attribute->set_position( 0 );
$attribute->set_visible( true );
$attribute->set_variation( true );
$product->set_attributes( array( $attribute ) );    

$product->save();
$product_id = $product->get_id();

// Create the variation for the player product
$variation = new WC_Product_Variation();
$variation->set_virtual( true );
$variation->set_regular_price( $starting_price ); // in current currency
$variation->set_parent_id( $product_id );
$variation->set_attributes( array('Badge ID' => '1000') );
$variation->set_manage_stock(true);
$variation->set_stock_quantity( STARTING_STOCK);
$variation->set_stock_status('instock');                
$variation->save();

字符串
如何将产品变量设置为1000,而不是Any Badge ID的变量?

zsbz8rwp

zsbz8rwp1#

要将产品变量设置为特定的徽章ID(例如,1000)而不是“任何徽章ID”,您需要确保正确设置属性选项和变量数据。以下是实现此目的的代码的更新版本:

// Set the product attribute
$attribute = new WC_Product_Attribute();
$attribute->set_name('Badge ID');
$attribute->set_options(array('1000')); // Set the desired badge ID as an option
$attribute->set_position(0);
$attribute->set_visible(true);
$attribute->set_variation(true);
$product->set_attributes(array($attribute));

$product->save();
$product_id = $product->get_id();

// Create the variation for the product
$variation = new WC_Product_Variation();
$variation->set_regular_price($starting_price); // in current currency
$variation->set_parent_id($product_id);

// Set variation attributes
$variation->set_attributes(array('badge_id' => '1000')); // Use the attribute name and option value
$variation->set_manage_stock(true);
$variation->set_stock_quantity(STARTING_STOCK);
$variation->set_stock_status('instock');

// Set the variation title (optional but recommended)
$variation->set_title('Badge ID 1000');

$variation->save();

字符串

**在此代码中:**我调整了变量的set_attributes方法,以使用属性名称(badge_id)和所需的选项值('1000')。我添加了一行,以使用set_title设置变量标题。此步骤是可选的,但有助于识别。请确保您使用的是正确的属性名称('Badge ID')和与您为属性设置的选项匹配的确切选项值('1000')。这将导致专门针对“Badge ID 1000”而不是“Any Badge ID”的变量。
这里有一个替代解决方案:

// Set the product attribute
$attribute = new WC_Product_Attribute();
$attribute->set_name('Badge ID');
$attribute->set_options(array('1000')); // Set the desired badge ID as an option
$attribute->set_position(0);
$attribute->set_visible(true);
$attribute->set_variation(true);
$product->set_attributes(array($attribute));

$product->save();
$product_id = $product->get_id();

// Create the variation for the product
$variation = new WC_Product_Variation();
$variation->set_regular_price($starting_price); // in current currency
$variation->set_parent_id($product_id);

// Set variation attributes
$variation->set_attributes(array('badge_id' => '1000')); // Use the attribute name and option value
$variation->set_manage_stock(true);
$variation->set_stock_quantity(STARTING_STOCK);
$variation->set_stock_status('instock');

// Set the variation title (optional but recommended)
$variation->set_title('Badge ID 1000');

// Set this variation as the default
$product->set_default_attributes(array('badge_id' => '1000'));
$product->set_variation_default($variation->get_id());

$variation->save();
$product->save();


在此版本中,set_default_attributes()方法用于设置默认变量属性,set_variation_default()用于将变量标记为默认值。这应该可以实现将徽章ID为1000的变量作为默认值而不是“Any Badge ID”的结果。

相关问题