以编程方式在WooCommerce中添加自定义产品属性和变量

时间:2013-11-28 09:34:08

标签: woocommerce wordpress

您能告诉我如何以编程方式在WooCommerce中添加自定义产品属性和变量吗?我知道这很容易在Woocommerce GUI中完成,但我需要通过functions.php

来完成

我有一个名为“Class”的属性和一些变量为[A,B,C,D]现在我想将它们添加到Cart and Shop页面,我尝试了这个功能,但它没有添加任何到页面的东西:

function woocommerce_variable_add_to_cart() {
   //Type attribute
    $product_attributes['type'] = array(
        //Make sure the 'name' is same as you have the attribute
        'name' => htmlspecialchars(stripslashes('Class')),
        'value' => $attributes,
        'position' => 1,
        'is_visible' => 1,
        'is_variation' => 1,
        'is_taxonomy' => 0
    );

//Add as post meta
update_post_meta($post_id, '_product_attributes', $product_attributes);

}

由于

1 个答案:

答案 0 :(得分:0)

我刚注意到上面的函数引用的是“$ attributes”,它看起来并不像在该函数中定义的那样。希望你的功能的工作副本固定,否则值=> NULL可能是您更新失败的原因。

另一方面,我认为你的$ product_attributes定义不明确(但我不是100%肯定)。

我创建了一个名为“my_attr_name”的自定义属性,其值为“my_custom_value”,并检查了MySQL数据库以查看它是如何存储的。它使用meta_key = _product_attributes和“meta_value”serialized存储在表“wp_postmeta”中。所以我复制了序列化的值并尝试反序列化它只是为了看它应该如何定义。它看起来像你的,除了你的属性键(即'type')和子数组的第一个键的值应该匹配。

这是我的例子:

Array
(
    [john-doe] => Array
        (
            [name] => 'John Doe'
            [value] => my_custom_value
            [position] => 0
            [is_visible] => 1
            [is_variation] => 0
            [is_taxonomy] => 0
        )

)

当您看到数组的关键 john-doe 〜子阵列的第一个键(也是 John Doe )时。在你的情况下:

type <> htmlspecialchars(stripslashes('Class'))

值得一提的是,如果你的'名字'=&gt; 'John Doe'然后主密钥应该是'john-doe'(小写和减号作为空格替换)。我不知道这是否必须,但至少这是WP 4.2.2的工作方式。

至于其他关键:

  • is_visible :如果该属性在产品页面上可见
  • 位置:属性的顺序(0 =第一,1 =下一个属性等);我认为应该始终定义这个,否则你有可能覆盖第一个(0)索引;所以你应该在添加新的之前了解它们的数量(参见$ meta = get_post_meta(get_the_ID(),'_ product_attributes'))
  • is_variation :可能是smth。与变量产品(?!)
  • 有关
  • is_taxonomy :我认为应始终 false ,因为meta_key不被视为分类法(只是猜测)