WooCommerce客户数据如何存储在数据库中

222 篇文章 4 订阅
34 篇文章 0 订阅

WooCommerce客户数据如何存储在数据库中

在本文中,我们将向您展示WooCommerce如何在数据库中存储客户数据。我们将浏览WordPress中用于存储任何客户相关信息的主要WooCommerce数据库表。这包括客户名称、订单历史和账单地址等数据。


数据库是一个信息集合,其组织方式允许通过整体管理系统在必要时添加、检索或修改数据(通过数据库查询)。

目录

WooCommerce Database Structure

WooCommerce客户数据

基于订单的 WooCommerce 客户数据

WordPress 用户数据

搜索 WooCommerce 数据库

1. 搜索基于订单的数据

2. 搜索 WooCommerce 用户数据

WooCommerce Database Structure

在我们开始之前,重要的是要强调 WooCommerce 存储其 WooCommerce 数据的方式不是集中的。相反,这些信息可以存储在不同的数据库表之间。由于 WooCommerce 是一个在 WordPress 生态系统中运行的插件,因此它可以与现有的 WordPress 数据库一起使用,并且它正在引入自己的数据库表。(因此,如果您需要备份 WooCommerce 数据库,则需要从两个地方复制数据)。
这里也是 WooCommerce 插件引入的一些自定义表格的概述:

表名描述
actionscheduler_actions有关将由 Action Scheduler 执行的操作的信息。
actionscheduler_claims用于在后台执行任务
actionscheduler_groups操作调度程序组
actionscheduler_logs记录有关 Action Scheduler 执行的数据。
woocommerce_sessions存储客户会话数据,例如购物车内容数据。
woocommerce_api_keys用于 REST API 的 API 密钥。
woocommerce_attribute_taxonomies存储产品的全局属性分类名称。
woocommerce_downloadable_product_permissions可下载产品的产品访问权限。
woocommerce_order_items存储与订单关联的订单项。
woocommerce_order_itemmeta存储有关订单行项目的元数据。
woocommerce_tax_rates包含您在管理区域中定义的税率。
woocommerce_tax_rate_locations存储与税率相关的位置数据。
woocommerce_shipping_zones存储您在设置区域中创建的运输区域。
woocommerce_shipping_zone_locations存储与发货区域关联的位置。
woocommerce_shipping_zone_methods与您的运输区域相关联的运输方式。
woocommerce_payment_tokens客户支付令牌(由网关使用)。
woocommerce_payment_tokenmeta存储有关支付令牌的元数据。
woocommerce_log通用日志记录表(替代基于文件的日志记录)。
wc_webhooks存储已在商店中设置的任何 webhook。
wc_download_log记录用户对可下载产品的下载。
wc_product_meta_lookup索引订单元数据以加快请求的查找表。
wc_tax_rate_classes税类数据。
wc_reserved_stock存储预留库存数据。

例如,WooCommerce 产品数据存储在woocommerce_order_itemswoocommerce_order_itemmeta表中。但这不是唯一可以找到 WooCommerce 产品数据的地方,您还可以在其他一些WordPress 数据库表中找到一些 WooCommerce 数据,例如:Comment(order_note)、postmeta (shop_order) 和Post (shop_order ID)。
这些数据库表不仅被您的 WooCommerce 商店使用,而且还被 WooCommerce 扩展和 WordPress 插件(如 WooCommerce SubscriptionWooCommerce Memberships等)使用。

WooCommerce客户数据

WooCommerce 使用 WordPress 数据库表和自己的自定义表的组合来存储其数据。但是,WooCommerce 没有专门的表来存储客户数据。客户数据存储在不同的数据库表中,这有时可能使检索这些数据具有挑战性。
此外,根据客户是访客用户还是注册用户,有两种不同的方法可以检索客户数据:

  • 基于订单的客户数据 – 这是为每个订单存储的客户数据,访客客户和注册用户均可使用
  • WordPress 用户数据 – 此数据仅为注册的 WordPress 用户存储。您可能知道,一些标准的 WordPress 用户字段包括一般信息,例如电子邮件和注册日期。WooCommerce 还存储首选的计费/运输信息,可用于为将来的订单预先填写结帐字段。

基于订单的 WooCommerce 客户数据

WooCommerce 默认将客户数据存储为每个订单的一部分。无论客户是注册用户还是来宾客户,订单中都会附有客户数据的记录。

这意味着,如果一个客户在不更改其个人详细信息的情况下下达多个订单,则每个订单都会有一份客户详细信息的副本。虽然这会产生大量重复数据,但它还允许为每个订单分别提供不同的个人详细信息(例如帐单地址或联系电话)。
因此,为了找到特定订单的客户详细信息,我们首先需要查看订单并在订单和客户数据之间建立联系。WooCommerce 使用 自定义帖子类型 “shop_order”来存储订单。这意味着订单将存储在 wp_posts  数据库表中,其中 post_type列设置为 shop_order。因此,我们需要使用以下查询从数据库中加载 WooCommerce 订单:

SELECT ID, post_author, post_date, post_status, post_type FROM wp_posts
WHERE post_type = ‘shop_order’

为简单起见,我们只加载了存储在帖子表中的最重要的订单字段,例如订单 ID 及其状态。结果如下所示:

订单 ID 是查找与订单相关联的客户数据的关键。WooCommerce 将大部分订单相关数据存储为发布元数据。因此,一旦我们有了订单 ID,就可以通过按订单 ID 搜索  wp_postmeta 表找到客户数据。
例如,如果我们想查找 ID 为 3313 的订单的客户数据,我们可以使用以下 mysql 数据库查询:

SELECT * FROM wp_postmeta WHERE post_id = 3313

这将为我们提供类似这样的信息(并非所有字段都显示在此屏幕截图中):

正如您从这个示例中看到的,每个客户字段都存储为订单的 post meta,其中  meta_key  是字段名称,  meta_value 是客户字段的实际值。存储的一些主要客户相关数据是计费和运输信息,例如:

  • _billing_first_name / _shipping_first_name
  • _billing_last_name / _shipping_last_name
  • _billing_company / _shipping_company
  • _billing_address_1 / _shipping_address_1
  • _billing_address_2 / _shipping_address_2
  • _billing_city / _shipping_city
  • _billing_state / _shipping_state
  • _billing_postcode / _shipping_postcode
  • _billing_country / _shipping_country
  • _billing_email
  • _计费电话
  • _customer_user

例如,如果您想查找所选订单的客户的一般联系方式,您可以编写如下查询:

SELECT * FROM wp_postmeta
WHERE post_id = 3313
AND meta_key IN (‘_billing_first_name’, ‘_billing_last_name’, ‘_billing_email’, ‘_billing_phone’, ‘_billing_city’)

这将给我们以下结果:

总而言之,下图说明了客户数据是如何存储在订单中的:

WordPress 用户数据

如果您在 WooCommerce 中禁用了“访客结帐”选项,则会为每个客户创建一个 WordPress 用户。在这种情况下,WooCommerce 将使用 WordPress 用户表来存储客户信息:

  • wp_users – 此表将包含一般用户信息,例如电子邮件地址和注册日期
  • wp_usermeta – 首选的计费/运输信息。基本上,WooCommerce 将订单账单/运输信息保存为用户元数据。通过这种方式,这些信息将可用于未来的订单和更快的结账过程。

在前面的示例中,您可能已经注意到订单元包含一个带有键  _customer_user的字段:


这就是 WooCommerce 将订单链接到用户的方式。当客户下订单时,此字段的值将设置为 0。否则,它将包含 WordPress 用户的 ID,在本例中为 11。
现在,让我们看看我们为用户存储了什么样的数据。正如我们前面提到的,  wp_users表存储了一般的 WordPress 用户数据。可以使用以下查询加载它:

SELECT ID, user_email, user_registered
FROM wp_users WHERE ID = 11

这给出了以下结果:

然而,大多数客户信息都存储在  wp_usermeta 表中。如果我们查询用户元表以向我们显示所选用户的所有结果:

SELECT * FROM wp_usermeta
WHERE user_id = 11

我们会发现  wp_postmeta表中存在的许多订单字段也为用户保存。这包括所有账单和运输信息:

您可能会注意到,用户字段键与订单字段键相同,唯一的区别是它们前面没有下划线。例如,订单中客户名字的元键是 _billing_first_name  而用户元键是  billing_first_name。
下图说明了所有这些客户数据如何在数据库中连接:

搜索 WooCommerce 数据库

搜索 WooCommerce 数据库时没有单一的方法。您的数据库查询将取决于您的要求以及您需要加载和搜索的数据。因此,需要考虑的一些方面是:

  • 您的 WooCommerce 设置是否允许访客用户或仅注册用户
  • 您是否需要将订单链接到客户搜索结果
  • 结果中需要哪些字段

由于数据库中数据的结构方式,您需要在搜索结果中加载的客户数据越多,您需要加入查询的表就越多。
让我们看一些例子。

1. 搜索基于订单的数据

正如我们已经讨论过的,基于订单的客户数据可供注册客户和来宾客户使用。因此,当您的商店允许客人结账时,我们建议使用这种搜索方法。
假设我们要按计费城市搜索客户。我们的查询将需要以下元素:

  1. 查询 wp_posts  表并从类型 shop_order 加载帖子。这将确保我们将仅搜索车间订单的元记录(而不是可能使用相同元键的其他帖子类型)。我们还将过滤订单以仅显示已完成的订单,因为我们不想搜索失败或取消的订单。
  2. 加入 wp_postmeta以将 _billing_city作为单独的列加​​载到结果中
  3. 再次 加入 wp_postmeta以将_billing_email作为单独的列加​​载到结果中。这样我们就可以看到每条记录的客户邮箱
  4. 在 WHERE 子句和条件中按计费城市过滤订单
  5. 按电子邮件地址对记录进行分组,这样我们每个客户就有一个记录。如果您的所有客户都是注册用户,我们建议改为按 _customer_id元字段对记录进行分组,因为这是识别客户的更准确方法。

这就是查询的样子:

SELECT MAX(orders.post_date) AS ‘last order date’, orders.post_status AS ‘status’,
    cities.meta_value AS ‘city’, emails.meta_value AS ’email’
FROM wp_posts AS orders
INNER JOIN wp_postmeta AS cities ON orders.ID = cities.post_id
    AND cities.meta_key = ‘_billing_city’
LEFT JOIN wp_postmeta AS emails ON orders.ID = emails.post_id
    AND emails.meta_key = ‘_billing_email’
WHERE orders.post_type=’shop_order’ AND orders.post_status = ‘wc-completed’
    AND cities.meta_value = ‘Chicago’
GROUP BY emails.meta_value

这将产生以下结果:

2. 搜索 WooCommerce 用户数据

现在让我们重做前面的示例,但这次我们将搜索用户元数据,而不是订单元数据。尽管过程听起来很相似,但在这种情况下,WooCommerce 数据库查询将完全不同。这是我们需要做的:

  1. 我们的基表将是  wp_users 表。我们将从该表中加载用户 ID 和电子邮件地址
  2. 在_customer_user字段上加入  wp_postmeta表,该字段包含用户的 ID
  3. 加入  wp_posts表,这样我们就可以确保我们只加载已完成车间订单的记录
  4. 加入  wp_usermeta表以将 billing_city作为单独的列加​​载到结果中
  5. 按城市列过滤结果
  6. 按用户 ID 对结果进行分组,为每个客户显示一条记录

这是构建此数据库查询的一种方法的示例:

SELECT users.ID, users.user_email, MAX(orders.post_date) AS ‘last order date’, orders.post_status AS ‘status’,
    cities.meta_value AS ‘city’
FROM wp_users AS users
INNER JOIN wp_postmeta AS customer_ids ON users.ID = customer_ids.meta_value
  AND customer_ids.meta_key = ‘_customer_user’
INNER JOIN wp_posts AS orders ON customer_ids.post_id = orders.ID
  AND orders.post_type=’shop_order’ AND orders.post_status = ‘wc-completed’
INNER JOIN wp_usermeta AS cities ON users.ID = cities.user_id
    AND cities.meta_key = ‘billing_city’
WHERE cities.meta_value = ‘Chicago’
GROUP BY users.ID

结果将类似于上一个示例中的结果:

希望本文能帮助您了解WooCommerce如何存储客户数据,您也许还向看看5个最佳拖放式WordPress网页生成器比较或者27个最好的酒店WordPress主题与漂亮的设计

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值