【问题标题】:Import WooCommerce Products with Custom Meta Dynamic Pricing Rules使用自定义元动态定价规则导入 WooCommerce 产品
【发布时间】:2018-11-17 07:30:28
【问题描述】:

我有一个包含数量和价格列的 excel 文件,我用它来为插件 WooCommerce Dynamic Pricing 的定价规则创建必要的输出。

我几乎想通了,但是 WooCommerce 进口商正在用它自己的 s:1:"..."; 包装我的元值。 ... 中的正确值决定了我的产品定价规则(固定价格折扣的价格范围)。如果我手动删除包装器,它可以工作。问题是我有 1500 多种产品。 如何准确导入 CSV 中的值?

meta: _pricing_rules 列的输出如下所示:

a:1:{s:17:"set_9jhpu8nb76h30";a:8:{s:15:"conditions_type";s:3:"all";s:10:"conditions";a:1:{i:1;a:2:{s:4:"type";s:8:"apply_to";s:4:"args";a:1:{s:10:"applies_to";s:8:"everyone";}}}s:9:"collector";a:1:{s:4:"type";s:7:"product";}s:4:"mode";s:10:"continuous";s:9:"date_from";s:0:"";s:7:"date_to";s:0:"";s:5:"rules";a:5:{i:1;a:4:{s:4:"from";s:3:"100";s:2:"to";s:3:"249";s:4:"type";s:11:"fixed_price";s:6:"amount";s:4:"3.65";}i:2;a:4:{s:4:"from";s:3:"250";s:2:"to";s:3:"499";s:4:"type";s:11:"fixed_price";s:6:"amount";s:4:"3.55";}i:3;a:4:{s:4:"from";s:3:"500";s:2:"to";s:3:"999";s:4:"type";s:11:"fixed_price";s:6:"amount";s:4:"3.46";}i:4;a:4:{s:4:"from";s:4:"1000";s:2:"to";s:4:"2499";s:4:"type";s:11:"fixed_price";s:6:"amount";s:4:"3.36";}i:5;a:4:{s:4:"from";s:4:"2500";s:2:"to";s:0:"";s:4:"type";s:11:"fixed_price";s:6:"amount";s:4:"3.27";}}s:10:"blockrules";a:1:{i:1;a:5:{s:4:"from";s:0:"";s:6:"adjust";s:0:"";s:4:"type";s:16:"fixed_adjustment";s:6:"amount";s:0:"";s:9:"repeating";s:2:"no";}}}}

【问题讨论】:

  • 你称它为.CSV?逗号分隔值文件的一个关键部分是逗号。 :-) 看起来像是 JSON 的一个奇怪分支。
  • 哦,我想我明白了 - 您可能使用 this page 导出到 CSV,并且您可能住在分隔符默认为 ; 的地方? ...除了它仍然不是真正的 CSV,如果它有所有这些 {花括号}。也许“映射文件”下有更好的导出选项?
  • 我认为可以肯定地说您导出不正确,因为如果您转到 this link 并查看他们的两个示例 CSV 链接,它们看起来与您的数据一点也不像。跨度>
  • 我的 .csv 包含所有官方列,例如名称、描述、正常价格等,格式正确。我专门讨论的是插件WooCommerce Dynamic Pricing 使用的元产品属性/值,它采用JSON 外观对象来解释它的定价规则。在我的 excel 文件中,每个产品都有一个 meta: _pricing_rules 列,可以正确输出产品的规则。问题在于 WooCommerce 中的导入器在数据库中的规则之前添加了额外的 s:99:

标签: excel wordpress csv woocommerce


【解决方案1】:

这些值在导入时被双重序列化。 This is by design in WordPress. 保存帖子或对象元数据时,WordPress 将自动序列化和反序列化对象和数组。但是,有时开发人员(错误)使用元数据 API 并尝试手动处理序列化。为了保持与这些开发人员及其代码的向后兼容性,元数据 API 将完全按照传入的任何序列化值返回。为此,存储在数据库中的值必须以 s:99:"..." 格式包装。

解决方法是确保 WooCommerce 在保存产品元数据时导入未序列化的值。

woocommerce_product_importer_parsed_data 过滤器和maybe_unserialize 函数可用于有条件地将元值反序列化为数组/对象。然后,元数据 API 将存储这些字段而不进行双重序列化。

<?php

// Step through import meta fields.
// Use `maybe_unserialize` to conditionally expand any serialized
// values to their corresponding objects/arrays.
function csv_import_serialized($data, $importer) {
  if (isset($data["meta_data"]) && is_array($data["meta_data"])) {
    foreach (array_keys($data["meta_data"]) as $k) {
      $data["meta_data"][$k]["value"] = maybe_unserialize($data["meta_data"][$k]["value"]);
    }
  }
  return $data;
}

// Hook into the filter
add_filter("woocommerce_product_importer_parsed_data", "csv_import_serialized", 10, 2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2012-09-13
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多