跳到主要内容

HPOS 命令行工具

概述

我们提供了一系列 WP-CLI 命令,用于管理与 HPOS 相关的功能,所有这些命令都位于 wp wc hpos 命名空间下(尽管您可能会在一些博客文章和较旧的文档中看到引用现在已弃用的 wp wc cot 命名空间)。

下表概述了每个命令的功能,更多详细信息和示例请参见下文。

请记住,这些命令本身具有文档和示例,可以通过 WP-CLI 的帮助功能,通过传递 --help 标志来访问。

命令使用此命令来...
wc hpos status获取您网站上所有 HPOS 相关的信息。
wc hpos enable启用 HPOS(以及可能的兼容模式)。
wc hpos disable禁用 HPOS(以及可能的兼容模式)。
wc hpos count_unmigrated获取所有待同步订单的数量。
wc hpos sync高效地将当前活动订单存储中的订单同步到另一个存储。
wc hpos verify_data验证数据存储之间的信息。
wc hpos diff获取两个订单存储之间订单差异的易于理解的版本。
wc hpos backfill将整个订单或特定订单数据从任何订单存储复制到另一个存储。
wc hpos cleanup从旧表删除订单数据。

用法和示例

wc hpos status

使用此命令来获取您网站上 HPOS 的设置和状态。 该命令将输出 HPOS 和兼容模式是否已启用,以及其他有用的信息,例如待同步的订单或需要清理的订单。

注意: 如果需要,可以使用 wc hpos sync 同步待同步的订单,并且,类似地,如果禁用兼容模式,可以运行 wc hpos cleanup all 来清理需要清理的订单。

示例 1 - HPOS 状态输出

$ wp wc hpos status
HPOS 启用?: 是
兼容模式启用?: 否
待同步订单: 651
需要清理的订单: 348

wc hpos enable

使用此命令通过命令行启用 HPOS 和兼容模式(如果需要)。

示例 1 - 通过 CLI 启用 HPOS

启用 HPOS 以及兼容模式(使用 --with-sync 标志)。

$ wp wc hpos enable --with-sync
正在运行预启用检查...
成功: 同步已启用。
成功: HPOS 已启用。

wc hpos disable

类似于前面的命令,此命令可用于禁用 HPOS。

示例 1 - 尝试禁用 HPOS(存在待同步的订单)

如果存在任何待同步的订单,在同步这些订单(通过 wp wc hpos sync)之前,您将无法禁用 HPOS。

$ wp wc hpos disable
正在运行预禁用检查...
错误: [失败] 存在待同步的订单。 请运行 `wp wc hpos sync` 来同步待同步的订单。

示例 2 - 禁用 HPOS

$ wp wc hpos disable
正在执行禁用前的检查...
成功:HPOS 已禁用。

wc hpos count_unmigrated

打印待同步的订单数量。

示例 1 - 获取待同步的订单数量

$ wp wc hpos count_unmigrated
有 651 个订单需要同步。

wc hpos sync

此命令可用于根据 WooCommerce > 设置 > 高级 > 兼容性 中的当前设置,将订单从文章存储迁移到 HPOS(反之亦然)。 也就是说,它会将当前选定的数据存储中的订单同步到另一个数据存储。

请注意,在设置中启用兼容性模式最终将处理所有订单的迁移,但可以使用此命令以更高效的方式执行此操作。

如果您需要更多控制权来选择用作源(或目标)的数据存储,而与设置无关,或者只想迁移几个订单或属性,请使用 wp wc hpos backfill 代替。

示例 1 - 同步所有订单

$ wp wc hpos sync
有 999 个订单需要同步。
订单数据同步 100% [============================================================================================] 0:08 / 0:08
同步完成。
成功:已在 14 **秒**内同步了 999 个订单。

wc hpos verify_data

使用此命令检查传统(文章)数据存储和 HPOS 中的订单数据是否同步。 这仅在启用了“兼容性模式”并且订单可能已在 WooCommerce 的常规流程之外被修改时才相关。

此命令作用于所有订单。 对于更友好的用户替代方案,该方案作用于单个订单,请参阅 wp wc hpos diff

示例 1 - 验证已迁移站点的属性

所有订单在数据存储之间都相同。

$ wp wc hpos verify_data
订单数据验证 100% [====================================================================================] 0:00 / 0:00
验证完成。
成功:已在 0 **秒**内验证了 999 个订单。

Example 2 - 验证失败

一个订单(ID 为 100126)由于订单总额、税费、修改日期和账单信息存在差异而验证失败。

$ wp wc hpos verify_data
Order Data Verification 100% [====================================================================================] 0:00 / 0:00
Verification completed.
Error: 999 个订单在 0 秒内被验证。发现 1 个错误:{
"100126": [
{
"column": "post_modified_gmt",
"original_value": "2024-04-04 15:32:27",
"new_value": "2024-04-05 15:19:56"
},
{
"column": "_order_tax",
"original_value": "74",
"new_value": "0"
},
{
"column": "_order_total",
"original_value": "567.25",
"new_value": "0"
},
{
"order_id": 100126,
"meta_key": "_billing_address_index",
"orig_meta_values": [
"Hans Howell Moore Ltd 325 Ross Drive Wilfridhaven WA 23322 NF heidi.koch@example.net +17269674166"
],
"new_meta_values": [
"Hans X Howell Moore Ltd 325 Ross Drive Wilfridhaven WA 23322 NF heidi.koch@example.net +17269674166"
]
}
]
}. 请检查上述错误。

Example 3 - 验证期间重新迁移

验证命令还支持 --re-migrate 标志,该标志将尝试同步存在差异的订单。 这可能会有效地覆盖数据库中的一个订单,因此请谨慎使用。

$ wp wc hpos verify_data --re-migrate
Order Data Verification 100% [====================================================================================] 0:00 / 0:00
Verification completed.
Success: 999 个订单在 0 秒内被验证。

wc hpos diff

如果您已启用兼容性模式或使用 wp wc hpos sync 迁移了订单,则所有订单在两个数据存储(旧数据存储和 HPOS)中都应处于相同状态,但可能会发生错误。 此外,手动修改数据库中的订单或使用与 HPOS 不兼容的插件可能会导致订单出现偏差。

wp wc hpos diff 工具可用于检查这些(可能的)差异,这对于确定是否应在任一数据存储之间进行重新迁移,或者是否需要采取更谨慎的方法非常有用。

该工具本身不会解决差异。 要解决这些差异,您应该使用 wp wc hpos backfill

Example 1 - 订单之间没有差异

订单在两个数据存储(旧数据存储和 HPOS)中相同。

$ wp wc hpos diff 100087
Success: 未发现差异。

示例 2 - 数据存储之间订单属性不一致

这个示例显示,订单 100126 在各个字段上存在差异。 例如,它的 HPOS 版本 状态completed,而该订单仍然处于 pending 状态。 类似地,其他字段也存在差异,并且存在一些元数据 (post_only_meta) 仅存在于旧版本中。

任何未在此处列出的其他订单字段或元数据均被理解为在两个订单版本中相等。

$ wp wc hpos diff 100126
警告:为订单 100126 发现差异:
+--------------------+---------------------------+---------------------------+
| 属性 | hpos | post |
+--------------------+---------------------------+---------------------------+
| 状态 | completed | pending |
| total | 567.25 | 267.25 |
| date_modified | 2024-04-04T15:32:27+00:00 | 2024-04-04T19:00:26+00:00 |
| billing_first_name | Hans | Jans |
| post_only_meta | | why not? |
+--------------------+---------------------------+---------------------------+

示例 3 - JSON 输出

您还可以以各种格式 (json, csvlist - 默认格式) 获取输出,这对于将各种订单的差异导出到文件中非常有用。

$ wp wc hpos diff 100126 --format=json
警告:为订单 100126 发现差异:
[{"property":"status","hpos":"completed","post":"pending"},{"property":"total","hpos":"567.25","post":"267.25"},{"property":"date_modified","hpos":"2024-04-04T15:32:27+00:00","post":"2024-04-04T19:00:26+00:00"},{"property":"billing_first_name","hpos":"Hans","post":"Jans"},{"property":"post_only_meta","hpos":"","post":"why not?"}]

wc hpos backfill

backfill 命令可用于选择性地将订单数据(或整个订单)从旧系统或 HPOS 数据存储迁移到另一个数据存储。它对于解决同步或迁移问题非常有用。

此命令的精确语法如下:

wp wc hpos backfill <order_id> --from=<datastore> --to=<datastore> [--meta_keys=<meta_keys>] [--props=<props>]

您必须指定要用作源的数据存储(postshpos),以及要用作目标的数据存储。--meta_keys--props 参数接收一个逗号分隔的元数据键和订单属性列表,这些键和属性可用于仅移动某些数据,而不是整个订单。

请注意,wp wc hpos backfillwp wc hpos sync 在许多方面有所不同:

  • 您可以指定要操作的订单,这使您可以更好地控制一次性操作。
  • 它可以让您在 WC 设置中,无论当前订单存储是什么,在数据存储之间移动订单数据。相比之下,wp wc hpos sync 仅将数据从当前数据存储迁移到另一个数据存储。
  • 除了允许您迁移完整的订单之外,它还允许您选择要迁移的数据部分(订单字段或元数据)。

示例 1 - 将完整订单从 HPOS 迁移到 posts

$ wp wc hpos backfill 99709
Success: 订单 99709 已从 hpos 迁移到 posts。

示例 2 - 迁移元数据

继续上一部分中的示例 2,我们可以看到如何仅将一个元数据键从 posts 迁移到 HPOS。

$ wp wc hpos backfill 100126 --from=posts --to=hpos --meta_keys=post_only_meta
Success: 订单 100126 已从 posts 迁移到 hpos。

如果您现在运行 wp wc hpos diff 命令,您将看到该元数据不再列为差异。

$ wp wc hpos diff 100126
Warning: 订单 100126 存在差异:
+--------------------+---------------------------+---------------------------+
| 属性 | hpos | post |
+--------------------+---------------------------+---------------------------+
| 状态 | completed | pending |
| 总价 | 567.25 | 267.25 |
| 修改日期 | 2024-04-04T15:32:27+00:00 | 2024-04-04T19:00:26+00:00 |
| 收货人姓氏 | Hans | Jans |
+--------------------+---------------------------+---------------------------+

示例 3

同样,遵循之前的示例,我们现在可以根据需要调整所有数据。 例如,我们可以将订单状态从 posts 迁移到 HPOS,并将其他信息以相反的方向进行迁移。 最终,订单将完全相同,可以通过 wp wc hpos diff 进行确认。

  1. 同步订单状态从 posts 到 HPOS。 这意味着订单在两个数据存储中都将变为“待审”状态。

    $ wp wc hpos backfill 100126 --from=posts --to=hpos --props=status
    Success: Order 100126 backfilled from posts to hpos.
  2. 同步其他属性从 HPOS 到 posts。

    $ wp wc hpos backfill 100126 --from=hpos --to=posts --props=total,date_modified,billing_first_name
    Success: Order 100126 backfilled from hpos to posts.
  3. 我们是否已经完全同步?

    $ wp wc hpos diff 100126
    Success: No differences found.

wc hpos cleanup

cleanup 命令可用于在启用 HPOS 且兼容性模式被禁用时,从旧数据表删除订单数据。

由于这是一个破坏性操作,因此该工具默认情况下不会执行任何操作。 您必须指定一个订单 ID、一系列订单 ID 或 all 以对所有订单执行操作。

该工具还会验证订单,并在帖子版本似乎比 HPOS 版本更新时停止,以便更仔细地检查这些差异(例如,使用 wp wc hpos diff),并在执行删除操作之前调整数据(使用 wp wc hpos backfill)。

注意: 此命令不会从 posts 表中删除占位符记录(类型为 shop_order_placehold 的帖子)。 我们正在努力在不久的将来允许这样做,但目前保留占位符,以便在必要时可以切换数据存储。 元数据将被删除,而元数据是旧订单存储中存储大部分数据的区域,因此剩余的占位符帖子非常轻量级。

示例 1 - 清理过程中的错误

默认情况下,清理一个在 posts 数据存储中看起来更新的订单是被禁止的。

$ wp wc hpos cleanup 100126
Starting cleanup for 1 order...
警告:清理订单 100126 时发生错误:posts 表中的数据似乎比 HPOS 表中的数据更新。

您可以使用 wp wc hpos diff 命令来调查差异:

$ wp wc hpos diff 100126
警告:为订单 100126 发现差异:
+---------------+---------------------------+---------------------------+
| 属性 | hpos | post |
+---------------+---------------------------+---------------------------+
| date_modified | 2024-04-05T15:19:56+00:00 | 2024-04-05T16:39:26+00:00 |
+---------------+---------------------------+---------------------------+

如果不需要进行同步,可以使用 --force 标志来跳过验证检查:

$ wp wc hpos cleanup 100126 --force
Starting cleanup for 1 order...
HPOS cleanup 100% [=====================================================================================================================] 0:00 / 0:00
成功:已完成 1 个订单的清理。

示例 2 - 清理一系列订单 ID

$ wp wc hpos cleanup 90000-100000
Starting cleanup for 865 orders...
HPOS cleanup 100% [=====================================================================================================================] 0:01 / 0:12
成功:已完成 865 个订单的清理。

示例 3 - 清理所有订单

$ wp wc hpos cleanup all
Starting cleanup for 999 orders...
HPOS cleanup 100% [=====================================================================================================================] 0:01 / 0:05
成功:已完成 999 个订单的清理。