我试图创建一个Wordpress插件,以编程方式创建变量产品,但问题是,我想使用我以前从管理仪表板手动定义的属性。我需要将属性分配给我正在创建的产品。
以下是我正在使用的代码(不是我的,我从以下答案中得到:在WooCommerce中以编程方式创建一个可变产品和两个新属性):
function addProduct(){
//Create main product
$product = new WC_Product_Variable();
//Create the attribute object
$attribute = new WC_Product_Attribute();
//pa_size tax id
$attribute->set_id( 0 ); // -> SET to 0
//pa_size slug
$attribute->set_name( 'Couleur' ); // -> removed 'pa_' prefix
//Set terms slugs
$attribute->set_options( array(
'Noir'
) );
$attribute->set_position( 0 );
//If enabled
$attribute->set_visible( 1 );
//If we are going to use attribute in order to generate variations
$attribute->set_variation( 1 );
$product->set_attributes(array($attribute));
//Save main product to get its id
$id = $product->save();
$variation = new WC_Product_Variation();
$variation->set_regular_price(10);
$variation->set_parent_id($id);
//Set attributes requires a key/value containing
// tax and term slug
$variation->set_attributes(array(
'Couleur' => 'Noir' // -> removed 'pa_' prefix
));
//Save variation, returns variation id
echo get_permalink ( $variation->save() );
// echo get_permalink( $id ); // -> returns a link to check the newly created product
}
产品被正确地创建,但是代码创建了一个新属性,并将其称为“Couleur”,而不是使用我已经定义的“Couleur”属性。
提前谢谢。
WooCommerce允许您使用全局属性和产品级(本地或自定义)属性。
全局属性可用于所有产品。删除该属性的术语时,所有使用该属性和该术语的产品都将删除该术语。相反,当您添加新术语时,它将适用于所有其他产品。
全局属性您可以在Wordpress仪表板中找到它们
而产品级别(本地或自定义)属性仅为该产品定义,其他产品将不可用。
产品级属性只能在“属性”部分的产品编辑页面中找到。
您可以在此处找到更详细的信息:
解决方案
以编程方式,您需要向每个属性slug添加前缀pa
。
您还将id设置为零:$属性-
// get a product attribute ID by name.
$attribute_id = wc_attribute_taxonomy_id_by_name( 'Couleur' );
$attribute->set_id( $attribute_id );
不要用这个答案,你应该用这个。
有用链接
在WooCommerce中以编程方式创建一个可变产品和两个新属性
多亏了Vincenzo Di Gaetano,问题才得以解决。
这是工作代码:
function add_product(){
//Create main product
$product = new WC_Product_Variable();
//Create the attribute object
$attribute = new WC_Product_Attribute();
// get a product attribute ID by name.
$attribute_id = wc_attribute_taxonomy_id_by_name( 'Couleur' );
$attribute->set_id( $attribute_id );
//pa_size slug
$attribute->set_name( 'pa_couleur' ); // -> removed 'pa_' prefix
//Set terms slugs
$attribute->set_options( array(
'noir'
) );
$attribute->set_position( 0 );
//If enabled
$attribute->set_visible( 1 );
//If we are going to use attribute in order to generate variations
$attribute->set_variation( 1 );
$product->set_attributes(array($attribute));
//Save main product to get its id
$id = $product->save();
$variation = new WC_Product_Variation();
$variation->set_regular_price(10);
$variation->set_parent_id($id);
//Set attributes requires a key/value containing
// tax and term slug
$variation->set_attributes(array(
'pa_couleur' => 'noir' // -> removed 'pa_' prefix
));
//Save variation, returns variation id
echo get_permalink ( $variation->save() );
// echo get_permalink( $id ); // -> returns a link to check the newly created product
}
我正在查询如下所示的帖子: 这将返回product类型的所有post。但我在wooCommerce中创建的产品上有自定义属性,但我似乎在任何地方都找不到这些信息。 我尝试使用: 我还尝试: 当我print_r这些我得到了很多信息但我不能看到的产品属性从WooCommerce任何地方 下图显示了如何在产品上设置此信息。 查询帖子后如何访问此信息?特别是我需要提取的颜色和大小。
我正在尝试向现有的WooCommerce产品添加一个具有多个值的新属性。 这是我正在使用的代码。我把它简化了一点,使它更清楚。 该属性显示在产品的属性列表中。然而,条款没有添加。 数据库中也有这些术语: 我做错了什么?我做了很多研究,读了一些其他的问题,但它们对我没有帮助。 在WooCommerce中以编程方式创建新产品属性
在WooCommerce中,我试图使用以下代码将产品类别转换为产品属性: Is的部分工作原理与我在后端产品中需要看到的一样
每次根据其他几个字段的内容保存产品时,我都希望更新产品在我的商店中的属性。 然而,我正在努力让我的属性正确出现。 最初,我试图使用以下功能根据这个问题的公认答案更新产品: 这将添加到了分类法的可用术语列表中,但在我检查产品属性时,它们不可见。 接下来,我尝试了上述问题中第二个答案的变体: 这也无法更新产品的属性。 在这一点上,我不知道下一步该尝试什么。使用操作似乎是有效的,因为这个术语确实被添加到
如何从插件为WooCommerce创建属性?我只发现: 从这个问题 但这种方法需要某些产品的id。我需要生成一些未附加到任何产品的属性。
我正在使用此代码添加自定义属性 这个代码的结果我得到了添加只是产品属性名称没有术语值... 我找了很多,但没有得到任何答案。