【问题标题】:Adding Custom Product Attribute and Variable in WooCommerce Programatically以编程方式在 WooCommerce 中添加自定义产品属性和变量
【发布时间】:2015-05-14 07:16:27
【问题描述】:

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

我有一个名为“类”的属性和一些变量为 [A,B,C,D] 现在我想将它们添加到购物车和商店页面,我已经尝试过这个功能但它没有添加任何页面的东西:

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);

}

谢谢

【问题讨论】:

  • 有人对此有任何想法吗?
  • 我以前做过这个,虽然我不能发布代码 (NDA) 我可以告诉你,你需要使用 woocommerce_cart_loaded_from_sessionwoocommerce_before_cart 和(如果使用 AJAX ) woocommerce_ajax_added_to_cart 习惯于使用 $woocommerce->session$woocommerce->cart 在两个位置进行更新,如果您使用的是 AJAX。在以编程方式调整购物车项目中的属性时,这些都是必需的。

标签: woocommerce wordpress


【解决方案1】:

我刚刚注意到您上面的函数引用了一个“$attributes”,它看起来不像是在该函数中定义的。希望您的该函数的工作副本修复了其他值 => NULL,这可能是您更新失败的原因。

另一方面,我认为您的 $product_attributes 定义不正确(不过我不是 100% 确定)。

我创建了一个名为“my_attr_name”的自定义属性,其值为“my_custom_value”,并检查了 MySQL 数据库以查看其存储方式。它存储在表“wp_postmeta”中,meta_key=_product_attributes 和“meta_value”serialized。所以我复制了那个序列化的值并试图反序列化它只是为了看看它应该如何定义。它看起来像你的,除了你的属性键(即'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'))

值得一提的是,如果您的 'name' => 'John Doe' 那么主密钥应该类似于 'john-doe' (小写和减号作为空格替换)。我不知道这是否是必须的,但至少这是 WP 4.2.2 的工作方式。

至于其他键:

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

【讨论】:

    猜你喜欢
    • 2016-09-14
    • 2020-11-28
    • 2018-04-27
    • 2021-04-17
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2015-06-15
    相关资源
    最近更新 更多