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

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

How to Migrate Your Store to WooCommerce In Simple Steps - Next-Cart

使用文章类型存储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 或一些 ,通过直接操作 MySQL 数据表来存取WooCommerce商品或订单数据。

不得不说,真 TM 混乱。

大量 post_meta 带来的性能问题

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

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

WooCommerceCRUD 抽象类是什么?

在 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 的产品了。

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

资源分享 本站提供不断更新优质资源,敬请收藏关注
玄武新动力 » WooCoomerce 3.0 中新增的 CRUD 类,更稳定和更灵活的WooCommerce

提供最优质的资源集合

立即查看 了解详情