WooCoomerce 3.0 中新增的 CRUD 类,更稳定和更灵活的 WooCommerce

WooCoomerce 3.0 中新增的 CRUD 类,更稳定和更灵活的 WooCommerce

WooCoomerce 3.0 中新增的 CRUD 类,更稳定和更灵活的 WooCommerce

WooCommerce 是一个 WordPress 插件,为了方便利用 WordPress 的便利性进行开发,WooCommerce 开发团队使用了 WordPress 的自定义文章类型来存储订单,相信开发过 WooCommerce 主题或插件的朋友都了解这一点。

使用文章类型存储 WooCommerce 数据的问题

混乱的 WooCommerce 数据存取方式

既然商品和订单都是文章类型,我们就可以使用 WordPress 的 get_posts 或 WP_Query 来存储或获取这些数据。存储文章的 wp_posts 数据表字段有限,无法存储丰富的商品和订单数据表,所以,一部分数据是存储在 post_meta 中。我们可以通过 WordPress 的 get_post_meta 和 updata_post_meta 函数来存取这些数据。

同时,WooCommerce 提供了 wc_get_product*wc_get_order* 函数来帮助开发者存取数据。

一些开发者喜欢使用原生 MySQL 或一些 ORM ,通过直接操作 MySQL 数据表来存取 WooCommerce 商品或订单数据。

不得不说,真 TM 混乱。

大量 post_meta 带来的性能问题

另外,默认情况下,如果用户在站点下了一个订单,WooCommerce 会为每一个订单创建至少 40 个 post_meta 数据,也就是说,如果网站每天有 10 个订单,post_meta 数据表就要增加 400 行。post_meta 数据表越大,执行订单查询的时间就越长,这是一个不容忽视的性能问题。

为了解决数据存取方式的混乱问题,我们需要要求开发者可以并且只能通过一种方式来访问数据。为了解决性能问题,我们需要更换数据的存储方式和存储位置。

WooCommerce CRUD 抽象类是什么?

在 3.0 版本中,WooCommerce 提供了新的 CRUD 类来解决这个问题。这是一个抽象的接口,通过这个接口,我们可以实现。

  • 自定义每种数据的数据结构
  • 存取数据时,对任何一种数据做必要的验证
  • 作为开发者,我们不需要知道数据的存储位置,只需要知道操作数据的 API 函数
  • 把数据存储到自定义数据表中,而不会影响数据的调用方式
  • 使用相同的代码在后台更新数据,就像在 REST API 和 CLI 中那样 – 一切都是统一的。
  • 更少的代码,也意味着更少的 Bug,和更高的单元测试覆盖率。

有哪些数据将会被迁移到这个 CRUD 系统?

  • 产品
  • 顾客
  • 订单
  • 订单商品
  • 优惠券

这些都是 WooCommerce 中的主要数据类型,目前每个类型都是以自定义文章类型存储的。除了顾客数据是存储在用户和用户元数据中的。

两种储存 WooCommerce 数据方法的对比

我们来通过代码看一下新的 CRUD 系统是怎么使用的。下面的代码中,我们需要更新客户的订单姓名。

$order_id = 100;
update_post_meta( $order_id, '_billing_first_name', 'Fred' );
update_post_meta( $order_id, '_billing_last_name', 'Flintstone' );

我们需要知道订单的文章 ID,每个数据的 meta_key的元键,还要处理所有的验证,真累!

使用 CRUD,我们是这样更新这两个数据的。

$order_id = 100;
$order = wc_get_order( $order ); //得到 $order 类
$order->set_billing_first_name( 'Fred );
$order->set_billing_last_name( 'Flintstone' );
$order->save();

等等,代码咋看着还多了一行?别急,上面的代码中,我们只需要知道 $order_id 这一个数据就可以了,至于获取数据的类方法,我们可以通过 IDE(如 PHPStorm)的提示来输入。并且通过这种方式,我们不需要关心数据在数据库中是怎么存储的,非常方便兼容未来的 WooCommerce 版本。

WooCommerce 新 CRUD 类的意义

看起来,WooCommerce 在逐步脱离 WordPress,表面上是这样的,其实 WooCommerce 底层还是使用了很多 WordPress 的 API,完全脱离 WordPress 不大可能。不要忘了,WooCommerce 现在已经是 WordPress 母公司 Automatic 的产品了。

整体上来说,这个变化是好的,WooCommerce CRUD 类为开发人员提供了更统一的数据访问接口,意味着更好的稳定性,只要使用标准的方式访问数据,开发者就可以不用担心底层数据的变化;为数据访问提供了抽象层,意味着更大的灵活性,WooCoomerce 的数据可以很方便的被存储在其他数据表中,而开发者不用改变访问数据的方式。

本站提供 WordPress 主题定制开发服务

本站长期承接 WordPress 主题、插件、基于 WooCommerce 的商店商城开发业务。 我们有 8 年 WordPress 开发经验,如果你想 用 WordPress 开发网站, 请联系 QQ: 470266798,或邮箱: 4626395@gmail.com 咨询。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*